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

What is the naming convention for Unix FIFOs/named pipes?

各种手册页通常举例说明在 /tmp 目录中打开的 FIFO,但它们没有共同的命名约定。当我列出 /tmp 目录的内容时,除了名为 /tmp/ssh-5oRuBPhI9lv9 的目录外,我什么也得不到。 IPC 是否有约定,especially/specifically?

没有正式的命名约定。

当然,当使用 FIFO 时,您将需要一些 约定,因为 FIFO 通常用于不相关进程之间的进程通信。因此,不同进程必须知道该名称,这意味着您必须遵循某种约定,但这是您的决定。

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

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

之所以没有确定的方法自动生成和创建一个临时的、唯一命名的 FIFO,是因为 FIFO 被用作不相关进程的会合点,所以一般来说,这个名字必须事先知道 。使用具有唯一临时名称的 FIFO 会使其他进程更难找到它,这就违背了目的。