Sì, è equivalente, ma ovviamente solo se dici mknod
di creare effettivamente un FIFO, e non un dispositivo a blocchi o caratteri (raramente fatto come devtmpfs / udev fa per te).
mkfifo foobar
# same difference
mknod foobar p
In strace
è identico per entrambi i comandi:
mknod("foobar", S_IFIFO|0666) = 0
Quindi, in termini di syscalls, mkfifo
è in realtà una scorciatoia per mknod
.
La differenza più grande, quindi, è nella semantica. Con mkfifo
te puoi creare un sacco di FIFO in una volta sola:
mkfifo a b c
Con mknod
, poiché devi specificare il tipo, accetta sempre e solo un argomento:
# wrong:
$ mknod a b c p
mknod: invalid major device number ‘c’
# right:
mknod a p
mknod b p
mknod c p
In generale, mknod
può essere difficile da usare correttamente. Quindi, se vuoi lavorare con FIFO, segui mkfifo
.
mkfifo(2)
è davvero una chiamata di sistema separata damknod(2)
(ma finirà per fare esattamente la stessa cosamknod(S_FIFO)
).