我正在研究如何编写管道,并试图了解标准 c 库如何详细公开它们。我写了下面的代码,并期望输出是
2 3
MAJOR ERROR
BYE
但是第二行没有出现。有人可以解释为什么会这样吗?
int main()
{
int rc;
int p[2];
char buffer[40];
close(2);
rc = pipe(p);
printf("%d %d\n", p[0], p[1]);
FILE* pipeWrite = fdopen(p[1], "w");
fprintf(pipeWrite, "MAJOR ERROR\n");
close(p[1]);
rc = read(p[0], buffer, 40);
buffer[rc] = '\0';
printf("%s\n", buffer);
printf("BYE\n");
return 0;
}
谢谢。
最佳答案
您正在使用标准 IO 缓冲操作 (fprintf(3)
) 写入管道,但随后在刷新输出之前关闭文件描述符。在 close(p[1]);
调用之前立即添加 fflush(pipeWrite);
并查看您的输出是否符合您的预期。 (您也可以使用 fclose(pipeWrite);
,因为关闭标准 IO 流也会刷新输出。)
有关标准 IO 流缓冲选项的更多详细信息,请参阅 setvbuf(3)
联机帮助页。
关于c - 为什么这段代码不能从管道中读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5229337/