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)
).mkfifo
etmknod
sont en fait des programmes utilisant l'mknod
appel système (ne connaissaient pas cet appel système avant aujourd'hui) pour créer un FIFO. Vous utilisez les termes «FIFO» et «nommé» de manière interchangeable, je suppose. S'agit-il de la même chose? Les canaux nommés bidirectionnels sont implémentés au moyen de sockets de domaine Unix, non?Ils sont équivalents sauf aux extrémités extrêmes de la portabilité.
mknod ... p
était à l'origine le seul moyen de créer des canaux nommés, mais POSIX a choisi de l'omettre et d'inventer à lamkfifo
place, probablement parce que les canaux nommés sont un concept intrinsèquement plus portable que tout ce que d'autres chosesmknod
peuvent faire avec les appareils et leurs nombres majeurs et mineurs. L'mknod
appel système a également été omis des premières versions de POSIX.Donc, pour la portabilité vers l'ancien UNIX,
mknod ... p
c'est mieux. Pour les systèmes modernes,mkfifo
c'est légèrement mieux, bien qu'il soit peu probable que vous trouviez un véritable Unix moderne oùmknod ... p
cela ne fonctionne pas.la source