`mkfifo`で生成されたFIFOと同じように`mknod`で生成された名前付きパイプはありますか?

`mkfifo`で生成されたFIFOと同じように`mknod`で生成された名前付きパイプはありますか?

このmkfifo <file>コマンドを使用して、あるプロセスがファイルに書き込み、別のプロセスがファイルから読み取る名前付きFIFOを作成しました。

これで、このmknodコマンドで名前付きパイプを作成できることがわかりました。これらの名前付きパイプは生成されたFIFOと同じですかmkfifo、それとも異なる機能を持っていますか?

ベストアンサー1

はい、それらは同じですが、ブロックや文字デバイスではなく実際にFIFOを作成するように指示した場合にのみ明らかになりますmknod(devtmpfs / udevがこれを行うため、最近ではほとんど行われません)。

mkfifo foobar
# same difference
mknod foobar p

これらstrace2つのコマンドは同じです。

mknod("foobar", S_IFIFO|0666)           = 0

したがって、システムコールの観点からmkfifo実際には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

おすすめ記事