gpt4 book ai didi

C 双向管不工作

转载 作者:行者123 更新时间:2023-11-30 16:32:24 27 4
gpt4 key购买 nike

我试图在 C 中的父进程和子进程之间设置双向管道,但我的代码(如下)无法正常工作:

int main() {
int fd1[2], fd2[2];
char c;
fprintf(stderr, "Pipe 1 return: %i\n", pipe(fd1));
fprintf(stderr, "Pipe 2 return: %i\n", pipe(fd2));
pid_t pid = fork();
if (pid == -1) {
fprintf(stderr, "Error forking");
return -1;
}
if (!pid) {
dup2(fd1[1], 1);
dup2(fd2[0], 0);
close(fd1[0]);
close(fd2[1]);
//fprintf(stderr, "setvbuffer output: %i\n", setvbuf(stdin, NULL, _IONBF, 0));
fprintf(stderr, "Parent runing. Receiving\n");
c = getchar();
fprintf(stderr, "Parent received char. Modifying\n");
putchar(c + 2);
fprintf(stderr, "Parent sent char\n");
} else {
dup2(fd1[0], 0);
dup2(fd2[1], 1);
close(fd1[1]);
close(fd2[0]);
//fprintf(stderr, "setvbuffer output: %i\n", setvbuf(stdin, NULL, _IONBF, 0));
fprintf(stderr, "Child running. Printing\n");
putchar('c');
c = getchar();
fprintf(stderr, "Child received returned char: %c\n", c);
}

}

当我运行这个程序时,程序立即在第一个 getchar() 处等待。我还尝试过发送/接收文本行、使用注释掉的 setvbuf() 行、在从标准输入读取之前使用 sleep() 等。

这是我的实际代码的简化版本,它在两个不同的程序之间进行通信,并且我似乎能够在一个方向上成功地进行通信。

最佳答案

正如 John 在评论中所建议的,在每个 print 语句后调用 fflush(stdout) 可以解决该问题。

关于C 双向管不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50163735/

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