最近我开始怀疑自己错误地使用了管道的末尾:
从man手册中可以看到:
pipe() 创建一个管道.. ..pipefd[0] 指向管道的读取端。pipefd[1] 指向管道的写入端。
所以在我的脑海中,它应该是这样的:
.---------------------------.
/ /\
| pipedfd[0] pipedfd[1]| |
process1 ---> | | -----> process2
| input output| |
\____________________________\/
然而,我这里的代码可以正常工作,表明情况并非如此:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int pipedfd[2];
char buf[30];
pipe(pipedfd);
printf("writing to file descriptor #%d\n", pipedfd[1]);
write(pipedfd[1], "test", 5);
printf("reading from file descriptor #%d\n", pipedfd[0]);
read(pipedfd[0], buf, 5);
printf("read \"%s\"\n", buf);
return 0;
}
即它写入管道的输出并从管道的输入中读取?
pipefd[0]
(不是您图表中写入的部分)。听起来非常简单。 - Jonfd[1]
),然后从另一个端口取出来(fd[0]
)。如果你试图放入太多的东西,它会阻塞直到有东西被取出来。 - DarkDust