簡體   English   中英

是否有類似WaitNamedPipe的功能或在C ++ / linux上實現此功能的方法? (因此該過程不會無限期地阻塞管道)

[英]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

當然,也可以使用另一種方法來實現此目的。 我在父進程中嘗試了一個循環,在該循環中,它總是嘗試打開管道進行讀取,然后在無法打開時進入睡眠狀態。 這似乎沒有任何效果,可能是因為父進程在第一次打開調用時阻塞了。

謝謝你的幫助。

您需要在open(2)標志中使用O_NONBLOCK ,請參見fifo(7) 然后使用select(2)poll(2)等待輸入(帶有超時)。

您可以使用非阻塞管道,並使用超時調用select() 或者,您可以使用阻塞的read()調用,該調用之前調用了alarm()

暫無
暫無

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

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