我如何确定我的系统上进程替换在何处创建 FIFO 文件?

我如何确定我的系统上进程替换在何处创建 FIFO 文件?

我正在编写一个 C++ 应用程序,需要在 Bash shell 中使用进程替换。

我正在尝试找到一种方法来验证作为参数传递给我的程序的路径,其中一些路径指向由进程替换创建的 FIFO 文件。

是否有一种 shell(或 C++)方法可以帮助我检查系统是否创建了这些文件/dev/fd或者是否在其他地方创建了这些文件?

答案1

简短的回答是你不能这样做。仅仅因为目录是 bash 默认放置 fifo 路径的地方,并不意味着该目录中的特定 fifo 是由 bash 创建的,也不意味着它是 bash 作为参数传递给你的命令的。

从整体上看问题。你真正想要解决的是什么?

如果您试图解决“我的程序的输出必须始终通过管道传输到另一个程序”的问题,那么就不要要求用户使用 bash 晦涩难懂的进程替换。如果他们系统上的默认 shell 是 zsh,该怎么办?Bourne shell?Korn shell?

相反,让你的程序创建一个管道、分叉并执行另一个程序。

那么,你到底想做什么?如果你将输出写入程序用户传递的文件中,而不是写入 bash 创建的 fifo,会发生什么?

答案2

如果文件是管道,请使用以下-p选项:test

#!/bin/bash
file="$1"
if [ -p "$file" ]
then
    echo "$file is a pipe"
fi

演示:

$ myscript.sh <(echo hello)
/dev/fd/63 is a pipe

相关内容