1

私は C が初めてで、Unix 環境でパイプを使用して親プロセスから子プロセスに、またはその逆にデータを転送する方法を学ぼうとしています。以下のコードでは、コマンド ライン引数を受け取り、引数の値に基づいて char 配列を作成します。次に、パイプを使用して char 配列を、vc というプログラムを実行する子に渡します。このプログラムは、char 配列に基づいて数値の結果を返します。私の質問は、2 番目のパイプを使用して結果を親に戻すにはどうすればよいですか? また、親が出力を子に送信するように設定されているため、親がそれを取得したら、どうすれば画面に出力できますか? ありがとうございました。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc,char *argv[])
{
    int 
        pfildes[2],
        pid,
        argNumber;
    char
        buffer[256],
        charString[1024]; 
    //Check for arguments 
    if(argc != 2) {
        printf("No command line arguements given.\n");
        argNumber=10; //default
    }
    else
       argNumber=atoi(argv[1]);

    //***********************************
    //Build charString based on argNumber
    //***********************************       

    //create pipes
    if(pipe(pfildes) == -1) {
        //error occured when creating pipe
        perror("demo");
        exit(1);
    }
    //create child process
    if((pid=fork()) < 0) {
        //error occured when forking child
        perror("demo");
        exit(1);
    }
    else if(pid > 0) {
        //parent process
        close(pfildes[0]);
        dup2(pfildes[1],1);
        printf("%s", charString);

        close(pfildes[1]);

        perror("demo");
        _exit(1);
    }
    else {
        //child process
        close(pfildes[1]);
        dup2(pfildes[0],0);
        execlp("/usr/bin/vc","vc", NULL);
        close(pfildes[0]);

        perror("demo");
        exit(1);
    }

    while(wait(NULL) >0);
    return 0;
}
4

1 に答える 1