1
我試圖啓動一個子進程並向他發送命令trought pipe。我想我錯過了一個我不知道的概念。進程通信:發送*命令,爲什麼循環
第一個命令發送成功,另一個失敗,它給了我一個無限循環。我不明白爲什麼。
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 子進程:[61983]
輸入命令:[異體
]
!
輸入命令:!
[]
輸入命令:^ C
-bash-4.1 $
我結束的過程,否則會給我這後一個無限循環。
我在閱讀類似的問題,但我找不到答案。如果可能的話,請儘可能簡單地回答。
Thanx。
p.s and yes..this is a school work。我的目標是將相同的命令發送給多個孩子。但我試圖先走出這一步。
哇,學校的工作......對不起,你有一個非常酷的學校。因爲我試圖在一個程序員專業的學院接受教育,他們甚至沒有在第一個課程中給C,我必須自己學習所有東西。你非常幸運☺ – 2014-10-20 19:40:54