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)).