Sim, é equivalente, mas obviamente apenas se você disser mknodpara realmente criar um FIFO, e não um dispositivo de bloco ou caractere (raramente feito atualmente como devtmpfs / udev faz isso por você).
mkfifo foobar
# same difference
mknod foobar p
Em straceque é idêntico para ambos os comandos:
mknod("foobar", S_IFIFO|0666) = 0
Então, em termos de syscalls, mkfifoé realmente uma abreviação de mknod.
A maior diferença, então, está na semântica. Com mkfifovocê pode criar um monte de FIFOs de uma só vez:
mkfifo a b c
Com mknod, como você precisa especificar o tipo, ele apenas aceita um argumento:
# wrong:
$ mknod a b c p
mknod: invalid major device number ‘c’
# right:
mknod a p
mknod b p
mknod c p
Em geral, mknodpode ser difícil de usar corretamente. Portanto, se você deseja trabalhar com FIFO, atenha-se a mkfifo.
mkfifo(2)é realmente uma chamada de sistema separadamknod(2)(mas isso acabará fazendo exatamente a mesma coisa quemknod(S_FIFO)).