簡體   English   中英

"父子之間通過管道進行通信"

[英]communication between parent and child through pipe

我想要一個父母和孩子互相交談的程序。 所以輸出將是:

  • p:值
  • c:價值
  • p:單詞
  • c:單詞

等等.....

下面是一個代碼示例,其中輸出首先與父級對話,然后在子級對話。 如何更正代碼?

    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>管道:

  1. 一種用於親子交流;<\/li>
  2. 還有一個供孩子與父母交流<\/li><\/ol>

    如果您對兩者都使用相同的管道,那么您最終可能會遇到這樣的情況,例如孩子向管道寫入內容,然后直接再次讀回(並且父級將永遠看不到數據)。

    例如,這可能發生在例如

    在您的子進程中。

    對於上面顯示的write<\/code>和read<\/code>調用示例,您可能有如下內容:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM