gpt4 book ai didi

c - 为什么这段代码不能从管道中读取数据?

转载 作者:太空宇宙 更新时间:2023-11-04 07:39:56 24 4
gpt4 key购买 nike

我正在研究如何编写管道,并试图了解标准 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com