c-无法在命名管道中写入

  • 本文关键字:管道 c pipe mkfifo
  • 更新时间 :
  • 英文 :


在这段代码中,当我打开管道进行编写时,我的程序会崩溃。

char pipe[30];
int fd, tmp = 2;
sprintf(pipe, "root_%d", getpid());
ret_val = mkfifo(pipe, 0666);
fd = open(pipe, O_WRONLY); //HERE IS CRASHING - SUDDENLY FREEZES
write(fd, &tmp, sizeof(int));
close(fd)

一切似乎都很好,但我的错误在哪里;

这是一种预期的行为。来自man 7 fifo:

通常,打开FIFO块,直到另一端也打开。

因此,在有人打开同一管道进行读取之前,您的open不会返回。您可能想要添加O_NONBLOCK标志(并且可能在编写时获得SIGPIPE(,或者重新访问设计。

最新更新