2010-05-12 61 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