我在這裏發現了很多線程,詢問如何在寫入之後刷管道而不關閉它。 在每一個線程中,我可以看到不同的建議,但我找不到明確的解決方案。沖洗管道不關閉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:我指的是僞終端主/從。我已更新原始帖子。 –