Oui, c'est équivalent, mais évidemment seulement si vous dites mknod
de créer réellement un FIFO, et non un périphérique de bloc ou de caractère (rarement fait de nos jours comme devtmpfs / udev le fait pour vous).
mkfifo foobar
# same difference
mknod foobar p
Dans strace
c'est identique pour les deux commandes:
mknod("foobar", S_IFIFO|0666) = 0
Donc, en termes d'appels système, mkfifo
est en fait un raccourci pour mknod
.
La plus grande différence réside donc dans la sémantique. Avec, mkfifo
vous pouvez créer un tas de FIFO en une seule fois:
mkfifo a b c
Avec mknod
, puisque vous devez spécifier le type, il n'accepte qu'un seul argument:
# wrong:
$ mknod a b c p
mknod: invalid major device number ‘c’
# right:
mknod a p
mknod b p
mknod c p
En général, mknod
peut être difficile à utiliser correctement. Donc, si vous voulez travailler avec FIFO, respectez-le mkfifo
.
mkfifo(2)
est vraiment un appel système distinct demknod(2)
(mais il finira par faire exactement la même chose quemknod(S_FIFO)
).