微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

确定可读文件描述符是否是pipe道的读取结束

我想使用splice将STDIN_FILENO中的数据复制到文件描述符(可以是普通文件,char或块设备,FIFO或任何可以open )。 为了使用splice , 从文件描述符或文件描述符必须是pipe道的适当的末端,所以一般来说,当程序员想要将数据从非pipe道复制到pipe道时,pipe道被创build为中间缓冲区非pipe。 但是,如果STDIN_FILENO已经是pipe道的读取端,那么我可以跳过这一步,并尝试直接从STDIN_FILENO拼接到另一个文件描述符。 因此,我想能够确定STDIN_FILENO是否是pipe道的读取结束。

是否有Linux系统调用可以确定STDIN_FILENO是否是pipe道的读取结束?

关于epoll和splice的问题

使用GNU / Linux系统调用`splice`在Haskell中进行Zero-copy Socket到Socket的数据传输

调用linux splice()时参数无效

如何为具有未caching的DMA缓冲区的字符设备文件实现splice_read

什么是vmsplice(2)的语义,有没有赠送?

要获得有关打开fd的信息,可以使用fstat()。 我猜测结果的st_mode应该是S_IFIFO的管道。 或者,/ proc / self / fd /和/ proc / self / fdinfo /也提供了关于文件描述符的一些信息。 请记住,/ proc是linux特有的。

不过,我认为先尝试使用splice(),如果失败(使用EINVAL?),则可能会更容易。

作为替代,如果“fd与管道,套接字或FIFO关联”,则lseek()将与ESPIPE失败。 所以一个no-op lseek(fd,SEEK_CUR)会告诉你文件描述符是否是其中的任何一个

在我的情况下,这涵盖了所有我感兴趣的案例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐