我想使用 splice
将数据从 STDIN_FILENO
零复制到文件描述符(可以是常规文件、字符或 block 设备、FIFO 或任何可以用 open
打开的文件)。为了使用 splice
,from 文件描述符或 to 文件描述符必须是管道的适当末端,因此通常管道是当程序员想要将数据从非管道零复制到非管道时,创建它作为中间缓冲区。但是,如果 STDIN_FILENO
已经是管道的读取端,那么我可以跳过该步骤并尝试直接从 STDIN_FILENO
拼接到另一个文件描述符。因此,我希望能够确定 STDIN_FILENO
是否是管道的读取端。
有没有Linux系统调用可以判断STDIN_FILENO
是否是管道的读端?
最佳答案
要获取有关打开的 fd 的信息,您可以使用 fstat()。我猜结果的 st_mode 应该是管道的 S_IFIFO。或者,/proc/self/fd/和/proc/self/fdinfo/也提供一些关于文件描述符的信息。请记住/proc 是特定于 linux 的。
但是,我认为首先尝试使用 splice() 可能更容易,如果它失败(使用 EINVAL?),则返回您的魔法。
关于c - 确定可读文件描述符是否是管道的读取端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3639454/