2010-11-01 56 views
0

爲什麼這會令人困惑。 PHP的fopen將不會打開文件進行讀取,除非管道中的數據等待讀取(根據this評論)。 C的POSIX規範打開狀態表明,根據O_NONBLOCK標誌的狀態,當打開一個管道進行寫入時,open將阻止調用進程,或者如果沒有進程打開文件讀取時返回錯誤。這種差異是否可以調和?php的fopen與POSIX開放的管道不兼容

+0

其他人已經提出過這種情況:調用bash腳本將無用數據寫入管道,一旦打開完成後可以丟棄管道。我目前有PHP打開和關閉一個C線程來做這個讀取,但由於讀取是在一個循環,將運行每秒左右,我想嘗試做到這一點正確的方式,而不是執行任何非常昂貴的操作像線程創建。 – conartist6 2010-11-01 21:43:23

+1

[此評論](http://nl.php.net/manual/en/function.posix-mkfifo.php#89642)有幫助嗎? (本質上,用'r +'做一個'fopen',所以你也是一個作家......) – Wrikken 2010-11-02 18:41:06

+0

是的!讓它成爲答案。 – conartist6 2010-11-02 19:26:30

回答

0

編號Php應該向C發送信號,表示它正在等待連接,然後阻止輸入。 C應該在open調用返回-1和errno == 6時循環,然後fdopen描述符。請享用。