我在这里发现了很多线程,询问如何在写入之后刷管道而不关闭它。 在每一个线程中,我可以看到不同的建议,但我找不到明确的解决方案。冲洗管道不关闭C
这里是一个快速摘要:
最简单的方式,以避免读取管道阻塞是写即读字节的确切数量。
它也可以通过使用ptmx而不是管道来完成,但人们说这可能会很多。
注:这是不可能使用的fsync与管道
是否有其他更有效的解决方案?
编辑:当发送者想要写的n个字符,但客户端读取米字符(其中,M> N)
冲洗将是方便的。客户端将阻止等待另一个m-n个字符。如果发件人希望再次与客户端通信,则无需关闭管道,只需发送确切数量的字节就可以成为错误的良好来源。
接收器操作这样的,它不能被修改:
while((n=read(0, buf, 100)>0){
process(buf)
使发送者希望得到处理:“文件1”和“文件2”为将要:
write(pipe[1], "file1\0*95", 100);
write(pipe[1], "file2\0*95", 100);
我正在寻找一种方式来做类似的事情(不必使用\ n作为分隔符):
write(pipe[1], "file1\nfile2", 11); //it would have worked if it was ptmx
(使用读取和写入)
这听起来很像[X-Y问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。一般来说,不需要冲洗管道,那么真正的问题是什么? –
你是什么意思的“点”? –
@John:我指的是伪终端主/从。我已更新原始帖子。 –