我读过pipe2的Linuxmanpage,它声明您可以使用O_DIRECT标志创建一个在包模式下执行I/O的管道。
虽然我听说pipes和fifos在Linux中共享很多代码,而且在项目中可能对我很有用(我们已经在fifos中传递消息,但是我们必须寻找一个特殊的终止符,每次读取一个字节)。
在包模式下是否有与执行fifo I/O等价的东西?

最佳答案

文件描述符上的O_*标志通常可以由fcntl(fd, F_SETFL, ...)更改,但在这种情况下,我认为它不起作用,因为:
https://lkml.org/lkml/2015/12/15/480
这是两周前提交的一个补丁,用于支持这个用例,对它的唯一回复是一个自动化测试人员的几个构建失败。
所以你可以尝试修复这个补丁并应用它(应该很容易-看起来像一个打印错误,f应该是filp
或者(这是我更喜欢的选项)看看是否可以通过AF_UNIXSOCK_SEQPACKET插座来满足您的需求,而不是使用带有这个新标志的管道。它们更强大,更便携。
(我假设您在打开命名管道时已经尝试过将O_DIRECT传递给open,因为这是最明显的事情。)

关于c - Linux中的数据包模式下的Fifos,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34513583/

10-11 01:16