2013-10-07 3 views
0

Im 사용자가 입력 한 정수가 짝수 또는 홀수인지를 결정하는 프로그램을 작성하려면 c를 파이프로 사용하십시오. 또한 부모 시스템 프로세스는 정수 번호를 분기 된 하위 프로세스로 전송해야합니다. 자식 프로세스는 자신의 유형 (짝수 또는 홀수)을 결정하기 위해 보낸 정수를 수신해야합니다. 그런 다음 결과를 사용자에게 셸에 표시하기 위해 부모 프로세스로 반환해야합니다. 파이프 IPC를 사용하여 부모 프로세스와 자식 프로세스간에 데이터를 교환해야합니다.프로그래밍에서 파이프 사용

내 코드는 아이가 성공적으로 메시지가 나타납니다

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <signal.h> 
#include <string.h> 

void sendNumber(int); 
void RecResult(); 
int f_des[2]; 

int main(int argc, char *argv[]) 
{ 
    static char message[BUFSIZ]; 
    if (pipe(f_des) == -1) 
    { 
     perror("Pipe"); 
     exit(2); 
    } 
    switch (fork()) 
    { 

     case -1: perror("Fork"); 
      exit(3); 

     case 0: /* In the child */ 
     { 

      // read a meesage 
      close(f_des[1]); 
      read(f_des[0], message, BUFSIZ ); 

      int num=atoi(message); 
      printf("Message received by child: [%d]\n", num); 


      if(num % 2 == 0) 

       sprintf(message,"%d is Even \0",num); 

      else 

       sprintf(message,"%d is Odd \0",num); 

      close(f_des[0]); 
      write(f_des[1], message, BUFSIZ); 
      exit(0); 
     } 

      break; 
     default: /* In the parent */ 
     { 
      int num; 
      printf("\n Enter an Integer \n"); 
      scanf("%d",&num); 
      char msg[BUFSIZ]; 
      sprintf(msg,"%d",num); 

      // write a message 
      close(f_des[0]); 
      write(f_des[1], msg, BUFSIZ); 

      printf("\n Waiting Child \n"); 

      wait(NULL); 
      // read a mesaage 
      static char message[BUFSIZ]; 
      close(f_des[1]); 
      read(f_des[0], message, BUFSIZ); 

      printf("========> Result: %s . \n",message); 
     } 
    } 
} 

아래에 표시되어 있지만 부모가 어떤 결과를 수신하지 않습니다 중 하나가 여기 을 도울 수있는 S 내 출력

[email protected]:~$ gcc -o test_3 test_3.c 
[email protected]:~$ ./test_3 

Enter an Integer 
3 

Waiting Child 
Message received by child: [3] 
========> Result: . 
[email protected]:~$ 

thanks all;)

+2

자식 섹션의 시작 부분에서'close (f_des [1])'를 깨닫고'write (f_des [1], message, BUFSIZ);로 진행하십시오. 부모 섹션에서도 같은 문제가 발생하지만, 읽기와'f_des [0]'에서는 문제가 발생합니다. – WhozCraig

+3

부모가 자식에게 데이터를 쓰고 자식이 부모에게 데이터를 쓰는 경우 두 개의 파이프가 필요할 것입니다. –

+0

^^^^ ---- 그가 말한 것. 더 많은 지점으로, 두 파이프 * 세트 *. – WhozCraig

답변

1

PIPE 채널은 단방향 통신 채널입니다. 자식 프로세스가 부모 프로세스에 다시 쓰게하려면 부모로부터 메시지를받는 데 사용 된 것과 다른 두 번째 PIPE 채널이 필요합니다.