Unix FIFO /命名管道的命名约定是什么?

时间:2015-08-21 21:53:31

标签: unix ipc named-pipes conventions fifo

各种手册页通常举例说明在/tmp目录中打开的FIFO,但它们不共享通用的命名约定。当我列出/tmp dir'的内容时除了名为/tmp/ssh-5oRuBPhI9lv9的目录外,我什么也得不到。是否存在约定,特别是/专门用于IPC?

1 个答案:

答案 0 :(得分:4)

没有正式的命名惯例。

当然,在使用FIFO时,您需要某些约定,因为FIFO通常用于不相关进程之间的进程通信。所以这个名称必须为不同的流程所知,这意味着你必须遵循某种惯例,但这是你的呼唤。

您在/tmp中看到具有神秘名称的目录和文件的原因通常是调用mkstemp(3)mkdtemp(3)的相应进程的结果。这些函数以原子方式生成唯一名称并创建相应的文件/目录。

如果由于某种原因您希望您的FIFO具有相似的名称,则可以使用tmpnam(3)生成唯一名称,然后将该名称传递给mkfifo(3)。但请注意,在调用tmpnam(3)和调用mkfifo(3)之间有一个时间窗口,其中另一个进程可能会创建一个具有相同名称的文件(然后mkfifo(3)将失败)。如果这是一个问题,你可以用原型创建一个mkdtemp(3)的临时目录,然后用你选择的名称在该目录中创建FIFO。

没有确定的方法可以原子地生成和创建临时的,唯一命名的FIFO,因为FIFO被用作不相关进程的集合点,因此通常必须知道名称​​ a priori 。拥有一个具有唯一临时名称的FIFO将使其他进程更难找到它,这会破坏目的。