在这段代码中,当我打开管道进行编写时,我的程序会崩溃。
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
(,或者重新访问设计。