IPC - PIPE

Jongwon·2021년 12월 18일
0

Linux Programming

목록 보기
21/25

Pipe

한 프로세스의 표준 출력을 다른 프로세스의 표준 입력에 연결하여 부모/자식 또는 동일한 부모의 두 자식 프로세스 간 통신을 함.
프로세스간 단방향 통신의 방법(양방향을 위해서는 pipe 2개 사용해야함)
동기화를 제공
가상 메모리에 만들어지는 가상 파일이다.

pipe block

가득 차거나 비어있을 때 자동으로 block됨.
alarm() + handler: fcntl(filedes, F_SETFL, O_NDELAY) 설정 시 block된 상태에서도 깨어나게 할 수 있다.

Named Pipe

FIFO파일이라고도 불리며, 파일 시스템에 특수파일로 등록된다.
다른 프로세스의 파일에 대해 읽기/쓰기 수행이 가능하다.
mkfifo()로 생성한다.



<unistd.h> 헤더

  • void pipe(int fds[2])
    fds[0]은 읽기 위해, fds[1]은 쓰기 위해 사용

<stdio.h> 헤더

  • FILE popen(const char cmdstring, const char *mode)
    commmand 명령어로 파이프 파일 생성 후 방향을 설정한 뒤 cmdstring를 fork/exec, mode는 부모 입장에서 r/w 모드)
char *mode가
"r" : parent가 읽고, cmdstring이 stdout으로 출력
"w" : parent가 쓰고, cmdstring이 stdin으로 읽음.
  • int pclose(FILE *fd)

<sys/stat.h> 헤더

  • int mkfifo(const char* pathname, mode_t mode)
    접근권한 mode로 pathname에 fifo파일 생성. 성공은 0, 에러는 -1
profile
Backend Engineer

0개의 댓글