親子間でプロセス間通信

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Haru

親子間でプロセス間通信

#1

投稿記事 by Haru » 16年前

下のソースは勉強の為にサンプルであったプログラムをそのままコピペしたものなのですが、
このままだと、コンパイルエラーを起こしてしまいます。
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    pid_t pid ;
    char buffer[10],result[10];
    int pp[2] , qq[2];
    int a , b , c ;

    pipe(pp); /* 親へデータを送るためのパイプ */
    pipe(qq); /* 計算結果を子に送るためのパイプ */

    pid = fork();  /* 親子のプロセスの生成 */

    /*  子プロセスの動き */
    if ( pid == 0 )
       {
       close(pp[0]);
       close(qq[1]);

       /*  1つ目の変数の代入とパイプへの書き込み */
       printf("a = ");
       fgets(buffer,10,stdin);
       write(pp[1],buffer,strlen(buffer)+1);

       /*  2つ目の変数の代入とパイプへの書き込み */
       printf("b = ");
       fgets(buffer,10,stdin);
       write(pp[1],buffer,strlen(buffer)+1);

       /* 計算結果を読み込む */
       read(qq[0],result,10);

       printf("a + b = %s\n",result);
       close(qq[0]);
       close(pp[1]);
       }
    /*  親プロセスの動き */
    else
       {
       close(qq[0]);
       close(pp[1]);

       /* 1つ目の変数の読み込み */
       read(pp1[0],buffer,256);
       a = atoi(buffer);

      /* 2つ目の変数の読み込み */
       read(pp2[0],buffer,256);
       b = atoi(buffer);

       c = a + b ; /* 計算 */
       sprintf(buffer,"%d",c);

       /* 計算結果をパイプへ書き込む */
       write(qq[1],buffer,strlen(buffer)+1);

       close(pp[0]);
       close(qq[1]);
       }

return(0);
}
原因はここで、pp1、pp2の変数が定義されてないからなのですが、
>read(pp1[0],buffer,256);
>read(pp2[0],buffer,256);


read(pp[0],buffer,256);
read(pp[1],buffer,256);

このように設定しても、期待通りの動作(足し算)をしません。
どのようにしたら、よいでしょうか?
参考サイト

http://www.geocities.jp/sugachan1973/doc/funto45.html

toyo

Re:親子間でプロセス間通信

#2

投稿記事 by toyo » 16年前

read(pp[0],buffer,256);
read(pp[1],buffer,256);

pp[1] は書き込み用なので read できませんよ
両方とも pp[0] ではないでしょうか

Haru

Re:親子間でプロセス間通信

#3

投稿記事 by Haru » 16年前

>toyoさん

ありがとうございます。
おかげで解決しました!!
勉強に丁度良いサンプルがコンパイルできなくて、困ってたので助かりました!

閉鎖

“C言語何でも質問掲示板” へ戻る