[英]communication between parent and child through pipe
我想要一個父母和孩子互相交談的程序。 所以輸出將是:
等等.....
下面是一個代碼示例,其中輸出首先與父級對話,然后在子級對話。 如何更正代碼?
for(int i=0; i<N; i++){
pid=fork();
if(pid==-1){
perror("fork\n");
exit(EXIT_FAILURE);
}
else if(pid==0){
srand(time(NULL));
int c;
read(fd[i][0], &c, 1);
printf("c: value: %d\n", c);
char word[c];
read(fd[i][0],&word, sizeof(word));
printf("c: word: %s\n", word);
int sum;
sum=c*i;
write(fd[i][1], &sum, sizeof(int));
printf("c: sended %d\n", sum);
int flag=0;
printf("flag :%d\n", flag);
read(fd[i][0], &flag, sizeof(int));
printf("c: flag= %d ->exit\n", flag);
exit(1);
}else{
int c;
c=rand()%100+1;
write(fd[i][1], &c, sizeof(int));
printf("p: value: %d\n", c);
char word[c];
write(fd[i][1], &word, sizeof(word));
printf("p: word: %s\n", word);
int sum;
read(fd[i][0], &sum, sizeof(int));
printf("p: sum is: %d\n", sum);
int flag=1;
write(fd[i][1], &flag, sizeof(int));
printf("par: flag exit %d\n", flag);
wait(NULL);
}
}
要在兩個進程之間進行雙工通信,您需要兩個<\/em>管道:
如果您對兩者都使用相同的管道,那么您最終可能會遇到這樣的情況,例如孩子向管道寫入內容,然后直接再次讀回(並且父級將永遠看不到數據)。
例如,這可能發生在例如
在您的子進程中。
對於上面顯示的
write<\/code>和
read<\/code>調用示例,您可能有如下內容:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.