Sim, é equivalente, mas obviamente apenas se você disser mknod
para 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 strace
que é 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 mkfifo
você 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, mknod
pode 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)
).