2010-05-12 66 views
2

我在使用管道的程序中遇到問題。寫入管道死鎖程序

什麼我做的是使用管道叉/ EXEC一起將數據發送到另一個進程

什麼我已經是這樣的:

 
//pipes are created up here 

if(fork() == 0) //child process 
{ 
    ... 
    execlp(...); 
} 
else 
{ 
    ... 
    fprintf(stderr, "Writing to pipe now\n"); 
    write(pipe, buffer, BUFFER_SIZE); 
    fprintf(stderr, "Wrote to pipe!"); 
    ... 
} 

這適用於大多數的消息,但是當該消息非常大,寫入管道死鎖。

我認爲管道可能已滿,但我不知道如何清除它。我嘗試使用fsync但沒有奏效。

任何人都可以幫助我嗎?

回答

3

您需要在寫入過程中關閉管道的讀取端。操作系統會將數據寫入管道緩衝區中的管道,直到全部進程的管道打開讀取端實際上讀取到那裏。

+0

這個問題解決了,謝謝,直到寫完之後我才關閉管道 – avs3323 2010-05-12 01:34:11