Sí, es equivalente, pero obviamente solo si le dice mknod
que 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 strace
es idéntico para ambos comandos:
mknod("foobar", S_IFIFO|0666) = 0
Entonces, en términos de syscalls, en mkfifo
realidad es la abreviatura de mknod
.
La mayor diferencia, entonces, está en la semántica. Con mkfifo
usted 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, mknod
puede 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)
).