簡體   English   中英

在C / C ++中,我想多次寫入同一管道

[英]In C/C++ I want to write to the same pipe multiple times

我有一個程序,可以在兩個進程之間創建管道。 一個進程會不斷監視另一個進程的輸出,當遇到特定輸出時,它將使用write()函數通過另一個管道提供輸入。 我遇到的問題是,在我close()管道之前,管道的內容不會傳遞到另一個進程的stdin流中。 我希望該程序無限循環,並在每次遇到要查找的輸出時作出反應。 有什么方法可以在不關閉管道的情況下將輸入發送到另一個進程?

我進行了一些搜索,發現在關閉命名管道后可以重新打開它們,但是我想知道是否還有其他選擇,因為我已經編寫了使用未命名管道的代碼並且還沒有學會使用命名管道。 。

看看使用fflush

您如何閱讀另一端? 您是否需要完整的字符串? 您不會在您發布的代碼段中發送終止NUL。 也許發送strlen(string)+1個字節可以解決它。 沒有看到代碼,很難說。

使用fsync。 http://pubs.opengroup.org/onlinepubs/007908799/xsh/fsync.html

來自http://www.delorie.com/gnu/docs/glibc/libc_239.html :一旦寫入返回,數據就排隊待寫入並可以立即讀回,但是不一定要寫到永久存儲中立即。 在需要確保數據已永久存儲然后繼續之前,可以使用fsync。 (對於系統而言,批處理連續的寫操作並在方便時一次完成所有寫操作效率更高。通常,它們總是在一分鍾或更短的時間內寫入磁盤。)現代系統提供了另一個功能fdatasync,它僅保證文件的完整性數據,因此速度更快。 您可以使用O_FSYNC打開模式使寫入操作始終將數據存儲在磁盤上,然后再返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM