回答:
はい、それは同等ですがmknod、ブロックデバイスやキャラクターデバイスではなく、実際にFIFOを作成するように指示した場合にのみ明らかになります(最近ではdevtmpfs / udevが行うのでめったに行われません)。
mkfifo foobar
# same difference
mknod foobar p
でstrace、それは両方のコマンドで同一です。
mknod("foobar", S_IFIFO|0666) = 0
そのmkfifoため、syscallsの観点では、実際にはの省略形ですmknod。
最大の違いは、セマンティクスです。ではmkfifo、あなたは一度にFIFOの束を作成することができます。
mkfifo a b c
ではmknod、タイプを指定する必要があるため、1つの引数のみを受け入れます。
# wrong:
$ mknod a b c p
mknod: invalid major device number ‘c’
# right:
mknod a p
mknod b p
mknod c p
一般的に、mknod正しく使用することは困難です。したがって、FIFOを使用する場合は、に固執しmkfifoます。
mkfifoそしてmknod、実際に使用してプログラムされているmknodFIFOを作成するには、システムコール(今日の前に、そのシステムコールを知っていたしませんでしたが)。「FIFO」と「名前付き」という用語を同じ意味で使用していると思います。それらは同じものですか?双方向の名前付きパイプは、Unixドメインソケットによって実装されますよね?
移植性の極限を除き、これらは同等です。mknod ... pもともとは名前付きパイプを作成する唯一の方法でしたがmkfifo、おそらく名前付きパイプはmknodデバイスやメジャー番号とマイナー番号でできることよりも本質的に移植性の高い概念であるため、POSIXはそれを省略して代わりに発明することを選択しました。mknodシステムコールはまた、POSIXの早期verionsから取り残されました。
そのため、古代のUNIXへの移植性についてmknod ... pは、より優れています。現代のシステムでmkfifoは、わずかに優れていますが、実際にmknod ... p動作しないUNIXが実際に見つかることはほとんどありません。
mkfifo(2)んが、BSDでは実際には別のシステムコールであることに注意してくださいmknod(2)(しかし、それはまったく同じことをすることになりますmknod(S_FIFO))。