본문 바로가기

[+] Information/[-] Network

[2009/07/03] 프로세스간 통신2 예제소스(pipe2.c, pipe3.c)

/* pipe2.c */

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

#define BUFSIZE 30

int main(int argc, char **argv)
{
  int fd[2];
  char buffer[BUFSIZE];
  pid_t pid;
  int state;

  state = pipe(fd);
  if(state == -1){
    puts("pipe() error");
    exit(1);
  }

  pid = fork();
  if(pid == -1){
    puts("fork() error");
    exit(1);
  }
  else if(pid==0){  /*자식 프로세스의 경우 */
    write(fd[1], "Good!", 6);
    sleep(2);
    read(fd[0], buffer, BUFSIZE);
    printf("자식 프로세스 출력 : %s \n\n",  buffer);
  
  }
  else{             /* 부모 프로세스의 경우 */
    read(fd[0], buffer, BUFSIZE);
    printf("부모 프로세스 출력 : %s \n", buffer);
    write(fd[1], "Really Good", 12);
    sleep(3);  /* 큰의미 없음 : 출력 좋게 하려고 */
  }

  return 0;
}





/* pipe3.c */

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

#define BUFSIZE 30

int main(int argc, char **argv)
{
  int fd1[2], fd2[2];
  char buffer[BUFSIZE];
  pid_t pid;

  if(pipe(fd1)==-1 || pipe(fd2)==-1) {
    puts("pipe() error");
    exit(1);
  }

  pid = fork();

  if(pid ==-1){
    puts("fork() error");
    exit(1);
  }
  else if(pid==0){
    write(fd1[1], "Good!", 6);
    read(fd2[0], buffer, BUFSIZE);
    printf("자식 프로세스 출력 : %s \n\n",  buffer);
  }
  else{
    read(fd1[0], buffer, BUFSIZE);
    printf("부모 프로세스 출력 : %s \n", buffer);
    write(fd2[1], "Really Good", 12);
    sleep(1);
  }

  return 0;
}