各种手册页通常举例说明在/tmp
目录中打开的FIFO,但它们不共享通用的命名约定。当我列出/tmp
dir'的内容时除了名为/tmp/ssh-5oRuBPhI9lv9
的目录外,我什么也得不到。是否存在约定,特别是/专门用于IPC?
答案 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将使其他进程更难找到它,这会破坏目的。