gpt4 book ai didi

c - 进程通信: send * commands,为什么循环

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:03 26 4
gpt4 key购买 nike

我正在尝试启动一个子进程并通过管道向他发送命令。而且我想我错过了一个我不知道的概念。

第一个命令发送成功,另一个失败,死循环。我不明白为什么。

parent.c

int invoke_proc(int out_tube[2]) {

pid_t pid;
int rv;
int tube[2];

if(pipe (tube)) {
fprintf(stderr, "pipe");
exit(1);
}

pid = fork();
if (pid == -1) {
fprintf(stderr, "fork");
exit(1);
}

// parent
if(pid) {
close(tube[0]);
out_tube[1] = tube[1];
}

// child
else {
close(tube[1]);
dup2(tube[0], 0);
execl("child", "child", NULL);
}

return 0;
}

int main() {
int tube[2];
//for (int i = 0; i < 2; i++) {
invoke_proc(tube);

sleep(2);
write(tube[1], "allo\n", 7);
printf("!\n");

sleep(5);
write(tube[1], "bye bye\n", 10);
printf("!\n");

sleep(5);
write(tube[1], "exit\n", 10);
printf("!\n");

close(tube[1]);

//}
return 0;
}

child.c

int main() {
char string[100];

printf("Child Process: [%d]\n", getpid());
printf("-------------\n");

do{
printf("Enter Command: ");

fflush(stdout);

fgets(string, 100, stdin);
printf("[%s]\n",string);

} while(strcmp(string, "exit"));
return 0;
}

这是输出:

-bash-4.1$ ./parent Child Process: [61983]


Enter Command: [allo

]

!

Enter Command: !

[]

Enter Command: ^C

-bash-4.1$

我结束了这个过程,否则它会在这之后给我一个无限循环。

我正在阅读类似的问题,但找不到答案。如果可能,请尽可能简单地回答。

谢谢。

p.s 是的..这是一项学校作业。我的目标是向多个 child 发送相同的命令。但我想先走出这一步。

最佳答案

Nvm,我从另一个来源找到了解决方案:http://www.makelinux.net/alp/038

我正在将文件描述符转换为 File *,并写入其中。

不确定,但它满足了我的需要。

发送。

关于c - 进程通信: send * commands,为什么循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26473458/

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