2014-03-26 57 views
1

我有一個C程序,它將文件作爲參數,清理文件並將清理過的數據寫入新的臨時文件。然後它接受一些標準輸入,清理併發送標準輸出。管道併發和文件

我有第二個文件對這個臨時文件和stdin再次執行操作。

./file_cleanse <file1.txt> | ./file_operation <temp.txt> 

我要麼得不到或者從./file_operation荒謬stdout和我相信這是因爲它是從仍然被寫入文件中讀取/沒有在這一點上存在。

有什麼辦法讓./file_operation等到./file_cleanse在bash中返回一個值嗎?

+0

歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。 'file_operation'正在讀取'file_cleanse'在標準輸出(管道)上寫入的內容,還是從標準輸入中讀取更多數據進入'file_cleanse'?你的描述至少不明確。 'file_cleanse'如何確定臨時文件名?爲什麼不知道要寫入哪個文件? –

回答

0

什麼:

./file_cleanse <file1.txt> > /tmp/temporaryFile 
./file_operation <temp.txt> < /tmp/temporaryFile 
0

當我明白這個問題,file_operation需要處理臨時文件後讀取的file_cleanse標準輸出,但直到file_cleanse已經寫了一些數據,它不應該處理的臨時文件其標準輸出(標準輸入file_operation)。

如果這是正確的,那麼一個簡單的同步是file_operation從其標準輸入中讀取(一個字節或任何方便的大量數據)。當這成功時,file_cleanse必須完成臨時文件;因此file_operation可以處理臨時文件,然後讀取其餘的標準輸入並適當地處理。