gpt4 book ai didi

c - 在一个进程中写东西,在另一个进程中读取

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:15 25 4
gpt4 key购买 nike

我想在A进程中写一些东西,在A进程fork出来的B进程中读取。但是我发现除非A终止,否则B无法读取内容。如何在不退出 A 的情况下在 B 中读取的同时在进程 A 中写入?我的代码如下。

#include <stdio.h>
#include <unistd.h>

int mypipe[2];

int main(){
FILE* f;
pid_t pid = 0;
int num = 0, temp;

pipe(mypipe);

pid = fork();

if (pid == (pid_t)0){
f = fdopen(mypipe[0], "r");
while (1){
fscanf(f, "%d", &temp);
printf("from child: %d\n", temp);
}
fclose(f);
}
else{
f = fdopen(mypipe[1], "w");
while (1){
scanf("%d", &num);
fprintf(f, "%d\n", num);
//break;
}
fclose(f);
}

return 0;
}

最佳答案

B cannot read the content unless A is terminated

这是因为 A 实际上并没有写东西。 stdio 流(由 FILE * 表示)被缓冲。您可以使用 setvbuf() 设置缓冲模式.默认情况下,您使用 fdopen() 在管道上打开的流将完全缓冲,因此在缓冲区已满之前不会对管道进行实际写入。

最简单的解决方案是调用电话 fflush()在您希望写入发生的任何地方的代码中,例如在 fprintf() 之后的代码中:

    while (1){
scanf("%d", &num);
fprintf(f, "%d\n", num);
fflush(f);
//break;
}

关于c - 在一个进程中写东西,在另一个进程中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47196776/

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