写入管道死锁程序

时间:2010-05-12 01:13:05

标签: c pipe

我的程序中存在使用管道的问题。

我正在做的是使用管道和fork / 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但是没有用。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

您需要在执行写入的过程中关闭管道的读取端。操作系统会将数据写入管道缓冲区中的管道,直到所有进程打开管道的读取端实际读取的内容。