2016-05-19 3 views
0

変数を共有メモリに更新する必要があるコードを書き込もうとしました。そこでfork()を使って子プロセスを作成しました。私が持っている問題は、パイプを使用する方法がわからないことです。そのため、ある値に達したときに、あるプロセスがそれを判断すると、パイプを使用して出力が終了したことを他のプロセスに伝える必要があります。私はパイプが使用されている多くの例を見ていましたが、それでも実装する方法がわかりません。もし誰かがこれを行うためのガイドラインを私に助けてくれたら、本当に感謝します。あなたの親プロセスの出力に子プロセスの入力を接続する必要がありCでパイプを使用するには?

`#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <semaphore.h> 
#include <sys/mman.h> 
#include <sys/types.h> 
#include <sys/wait.h> 

    int main(void) 
{ 
int * shared=mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS, -1, 0); 
printf("Value of the variable at the beginning: %d\n", * shared); 
pid_t pid; 
pid=fork(); 

if(pid==0) 
{ 
int a=0; 
a=* shared; 
a+=3; 
printf("Child process: %d\n", a); 
sleep(rand()%10); 
} 
    else{ 
int b=0; 
b= * shared; 
b+=2; 
printf("Parent process: %d\n", b); 
sleep(rand()%10); 
    } 
    } 

答えて

0

: は、ここでは、コードです。 以下の例では、親の標準出力を子の標準入力にリダイレクトしています。親にコンソールに依然として印刷できるようにする場合は、2番目のdupcloseが呼び出され、使用されます。pipefd [0 ]ファイルハンドルとして

int main(int argc, char **argv) 
{ 
    int pipefd[2]; 
    int pid; 

    int * shared=mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS, -1, 0); 

    pipe(pipefd); 

    pid = fork(); 
    if (pid == 0) 
    { 

     dup2(pipefd[0], 0); 
     close(pipefd[1]); 

     int a=0; 
     a=* shared; 
     a+=3; 
     printf("Child process: %d\n", a); 
     sleep(rand()%10); 

     // Here you can read from stdin and to get input from parent process 
    } 
    else 
    { 
     int b=0; 
     b= * shared; 
     b+=2; 
     printf("Parent process: %d\n", b); 

     dup2(pipefd[1], 1); 
     // At this point you won't be able to output from parent to the console 
     // your output will not go to the child 
     close(pipefd[0]); 
     sleep(rand()%10);   
    } 
} 
+0

ありがとうございます:) – Felicity

関連する問題