Sí, es equivalente, pero obviamente solo si le dice mknodque cree realmente un FIFO, y no un dispositivo de bloque o de caracteres (rara vez se hace en estos días, ya que devtmpfs / udev lo hace por usted).
mkfifo foobar
# same difference
mknod foobar p
En stracees idéntico para ambos comandos:
mknod("foobar", S_IFIFO|0666) = 0
Entonces, en términos de syscalls, en mkfiforealidad es la abreviatura de mknod.
La mayor diferencia, entonces, está en la semántica. Con mkfifousted puede crear un montón de FIFO de una vez:
mkfifo a b c
Con mknod, dado que debe especificar el tipo, solo acepta un argumento:
# wrong:
$ mknod a b c p
mknod: invalid major device number ‘c’
# right:
mknod a p
mknod b p
mknod c p
En general, mknodpuede ser difícil de usar correctamente. Entonces, si desea trabajar con FIFO, quédese mkfifo.
mkfifo(2)tenga en cuenta que en BSD realmente es una llamada al sistema separadamknod(2)(pero terminará haciendo exactamente lo mismomknod(S_FIFO)).mkfifoy enmknodrealidad son programas que usan lamknodllamada del sistema (no sabía de esa llamada del sistema antes de hoy) para crear una FIFO. Usas los términos "FIFO" y "named" indistintamente, supongo. ¿Son la misma cosa? Las canalizaciones con nombre bidireccionales se implementan mediante sockets de dominio Unix, ¿verdad?Son equivalentes excepto en los extremos de la portabilidad.
mknod ... pOriginalmente era la única forma de crear tuberías con nombre, pero POSIX decidió omitirlo e inventarlomkfifo, presumiblemente porque las tuberías con nombre son un concepto inherentemente más portátil que todo lo que otras cosasmknodpueden hacer con los dispositivos y sus números mayores y menores. Lamknodllamada al sistema también quedó fuera de las primeras versiones de POSIX.Entonces, para la portabilidad a UNIX antiguo,
mknod ... pes mejor. Para los sistemas modernos,mkfifoes un poco mejor, aunque es bastante improbable que encuentre un Unix moderno real dondemknod ... pno funcione.fuente