Sì, è equivalente, ma ovviamente solo se dici mknoddi 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 mkfifote 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, mknodpuò 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)).