
저자: Michael Kerrisk
이 책의 소스 코드
-- 프로세스 위주로
[Vol.1]
1~5장까지는 가볍게 읽기
6장 프로세스
24장 프로세스 생성
25장 프로세스 종료
26장 자식 프로세스 감지
27장 프로그램 실행
28~31장 읽기
-- 파이프란?
[Vol.2]
7장 파이프와 FIFO
- pipe: 한 프로세스가 출력한 데이터를 다른 프로세스가 읽을 수 있도록 연결해주는 일종의 데이터 통로(버퍼)
- FIFO: named pipe. 이름(파일경로)를 가진 특수 파일
파이프를 통과하는 데이터는 순차적으로 전송되어 정확히 쓰여진 순서대로 읽힌다
비어있는 파이프로부터 데이터를 읽어오려면 적어도 한 바이트를 파이프에 써야 한다. -> (파이프가 비어 있다면 읽기는 블록 상태가 됨)
int fd[2];
pipe(fd);
if (fork() == 0)
{
// 자식: 파이프에서 읽기만 할 것
close(fd[1]); // **꼭 닫아야 함!**
// ... read(fd[0], ...)
}
else
{
// 부모: 파이프에 쓰기만 할 것
close(fd[0]); // **꼭 닫아야 함!**
// ... write(fd[1], ...)
}
사용하지 않는 fd를 닫아야 하는 이유
1) 블록/데드락 방지
2) 자원(리소스) 누수 방지