我已经使用该mkfifo <file>
命令创建了命名的FIFO,其中一个进程写入文件,而另一个进程从文件读取。
现在,我知道该mknod
命令能够创建命名管道。这些命名管道是否等效于由创建的FIFO mkfifo
,或者它们具有不同的功能?
是的,它是等效的,但显然只有在您告诉mknod
您实际创建一个FIFO而不是块或字符设备时才这样做(这些天很少这样做,因为devtmpfs / udev会为您执行此操作)。
mkfifo foobar
# same difference
mknod foobar p
对于strace
这两个命令,它是相同的:
mknod("foobar", S_IFIFO|0666) = 0
因此,就syscall而言,mkfifo
实际上是的简写mknod
。
那么,最大的区别就是语义。这样一来,mkfifo
您就可以创建一堆FIFO:
mkfifo a b c
使用mknod
,因为您必须指定类型,所以它只能接受一个参数:
# 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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句