Oui, c'est équivalent, mais évidemment seulement si vous dites mknodde 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 stracec'est identique pour les deux commandes:
mknod("foobar", S_IFIFO|0666) = 0
Donc, en termes d'appels système, mkfifoest en fait un raccourci pour mknod.
La plus grande différence réside donc dans la sémantique. Avec, mkfifovous 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, mknodpeut ê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)).