pipe()를 호출하면 파이프를 만들고 두 개의 file descriptor table을 생성한다.
→ 읽기용 descriptor table(fd[0])과 쓰기용 descriptor table(fd[1]) 생성
부모와 자식이 pipe로 소통을 한다.
- 부모가 pipe 호출
- 파일 디스크립터 테이블 2개 생성
- 커널 안에 파이프 객체 생성
- fd[1]을 가지고 작성, fd[0]으로 읽음
- fork를 해서 자식 프로세스 생성
- 자식 프로세스는 대부분의 정보를 복사한다.→ 파일 디스크립터 내용 또한 복사됨
- 같은 파이프에 쓰고 읽을 수 있다.
- read한 데이터는 파이프에 저장되지 않고, 없어진다.
파이프 안에 read할 데이터가 있는데 read한 경우
→ 그냥 read가 됨
파이프 안이 비어있는데 read한 경우
지금은 비어있지만 누가 쓸 수도 있으니 기다려야 되나?
- 어떤 프로세스가 파이프에 대해서 write용 file descriptor를 open해놓고 있다면
- 시스템이 기다려야 한다고 판단, 파이프에 뭔가가 쓰여질 때까지 block된다.
- 만약 아무도 파이프에 대해서 write용 file descriptor를 open을 해놓지 않았다면,
- 기다리지 않고 바로 0을 리턴한다.
'Study > 시스템프로그래밍' 카테고리의 다른 글
[시스템프로그래밍] 시간과 타이머 (0) | 2023.12.03 |
---|---|
[시스템프로그래밍] Signals (1) | 2023.12.03 |
[시스템프로그래밍] 디렉토리 엔트리, hard/symbolic link, stat에 관하여 (0) | 2023.11.02 |
[시스템프로그래밍] 프로그램, 프로세스, 스레드에 관하여 (2) | 2023.10.26 |
[시스템프로그래밍] 리눅스 터미널과 명령어 요약 - 2 (1) | 2023.10.26 |