gpt4 book ai didi

c - C中从父进程到子进程连续写入

转载 作者:行者123 更新时间:2023-11-30 15:37:02 26 4
gpt4 key购买 nike

我正在尝试使用进程和 fork() 来更好地了解它们的工作原理。现在,我正在尝试编写一个程序,该程序接受 shell 输入并将输入 kq 中的整数从父进程写入子进程。到目前为止,这是我的代码,我不明白为什么它不能正常工作,但我关闭了所有管道,并且代码非常小。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> /* pipe, fork */
#include <sys/wait.h> /* wait */
#include <sys/types.h> /* pid_t */

void testProc(int k, int q){
pid_t new_proc;
int fd[2];
pipe(fd);
new_proc = fork();
int w;

if (new_proc > 0) {

close(fd[0]);
for(w=k; w < q; w++) {
write(fd[1], &w,sizeof(int));
printf("Wrote %i out of %i\n", k, q);
}
close(fd[1]);
}

else if (new_proc == 0) {
close(fd[1]);
while(read(fd[0], &w, sizeof(int) ) > 0) {
printf("Child received %i out of %i from Parent.\n", k, q);
}
close(fd[0]);
exit(1);
}

else{
printf("Fork failed\n");
exit(1);
}
}

int main(int argc, char *argv[]) {
int n, m;

if (argc != 3) {
fprintf(stderr, "Need 3 arguments\n");
return -1;
}

m = atoi(argv[2]);
n = atoi(argv[1]);

testProc(n, m);
return 0;
}

我意识到这段代码应该检查其他系统调用,例如 close() readwrite,我也明白使用 atoi 是个坏主意。我在问题中跳过了这些内容,以使其尽可能简洁。

运行 ./testProc 4 8 时得到的输出

Wrote 4 out of 8
Wrote 4 out of 8
Wrote 4 out of 8
Wrote 4 out of 8
Child received 4 out of 8 from Parent.
Child received 4 out of 8 from Parent.
Child received 4 out of 8 from Parent.
Child received 4 out of 8 from Parent.

它只获取第一个值,我不明白为什么?如果不是这样,我将如何在进程之间将整数流从 k 传递到 q ?谢谢!

最佳答案

似乎是你的

printf("Wrote %i out of %i\n", k, q);

应该是

printf("Wrote %i out of %i\n", w, q);
^^
w here

在子进程中打印它时也是如此。

关于c - C中从父进程到子进程连续写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366491/

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