このmkfifo <file>
コマンドを使用して、あるプロセスがファイルに書き込み、別のプロセスがファイルから読み取る名前付きFIFOを作成しました。
これで、このmknod
コマンドで名前付きパイプを作成できることがわかりました。これらの名前付きパイプは生成されたFIFOと同じですかmkfifo
、それとも異なる機能を持っていますか?
ベストアンサー1
はい、それらは同じですが、ブロックや文字デバイスではなく実際にFIFOを作成するように指示した場合にのみ明らかになりますmknod
(devtmpfs / udevがこれを行うため、最近ではほとんど行われません)。
mkfifo foobar
# same difference
mknod foobar p
これらstrace
2つのコマンドは同じです。
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
。