![](/img/trans.png)
[英]How to make my C++ infinite loop program only receive linux pipe input just once for one time?
[英]Is there a function like WaitNamedPipe or a way to realize this on C++/linux? (so the process is not blocking on the pipe for infinite time)
我的C ++程序中有一個命名管道。 子進程在其中寫入一個值,而父進程則在其中讀取一個值。 我由mkfifo創建了管道,並且所有操作都被阻塞(在嘗試打開以進行寫入之前無法打開fifo進行讀取,而vv不幸的是,有時由於子進程運行的程序中的錯誤,我的子進程不會停止。任務來解決此外部程序中的此錯誤,但我想確保父進程不會在阻塞的打開fifo調用中無限期停止,而是在一段時間后繼續運行(不讀取管道中的值)。
所以我需要像WaitNamedPipe函數之類的東西。 該函數將等待,直到超時間隔過去或指定的命名管道實例可用於連接。 http://ist.marshall.edu/ist480acp/namedpipes.html#WaitNamedPipe
當然,也可以使用另一種方法來實現此目的。 我在父進程中嘗試了一個循環,在該循環中,它總是嘗試打開管道進行讀取,然后在無法打開時進入睡眠狀態。 這似乎沒有任何效果,可能是因為父進程在第一次打開調用時阻塞了。
謝謝你的幫助。
您可以使用非阻塞管道,並使用超時調用select()
。 或者,您可以使用阻塞的read()
調用,該調用之前調用了alarm()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.