3.1 파이프
3.1.1 | 명령
$ ls /etc | grep init
| (파이프명령) 을 통해 "ls /etc" 명령의 출력 결과를 "grep" 명령에 전달할 수 있다.
"grep" 명령은 전달받은 내용 중에서 init이 포함된 라인을 출력한다.
3.1.2 프로세스 파이프
FILE* popen(const char* command, const char* type);
기능: 파이프를 생성 -> fork() -> 쉘 실행 -> command 실행 -> 프로세스 생성
리턴: 성공 시 주소, 실패 시 NULL 리턴
type: "w", "r" //각각 쓰기전용, 읽기전용
int pclose(FILE* stream);
기능: 파이프를 닫고 프로세스 종료를 기다림
리턴: 실패 시 -1, 외에 command를 실행한 쉘의 종료 상태를 기다림
3.1.3 이름없는 파이프
int pipe(int pipefd[2]);
int pipe2(int pipefd[2], int flags);
기능: 이름없는 파이프 생성
리턴: 성공 시 0, 실패 시 errno 설정 후 -1 리턴
pipefd: pipefd[0], pipefd[1] //각각 읽기 끝, 쓰기 끝
flags: O_NONBLOCK으로 설정 가능
3.1.4 이름있는 파이프 (FIFO)
int mkfifo(const char* pathname, mode_t mode);
기능: 이름있는 파이프 생성, 프로세스 간 FIFO 파일을 매체로 통신 가능
리턴: 성공 시 0, 실패 시 errno 설정 후 -1 리턴
pathname: 생성할 FIFO 이름
mode: 생성할 FIFO 파일 접근 권한
파이프의 동기화 문제
이름없는 파이프와 이름있는 파이프(FIFO) 모두 동기화 문제가 발생할 수 있다.
'한국으로 > 임베디드 리눅스' 카테고리의 다른 글
4.1 스레드란? (0) | 2018.06.27 |
---|---|
3.4 메시지 큐 (0) | 2018.06.27 |
3.3 공유 메모리 (0) | 2018.06.27 |
3.2 세마포어 (0) | 2018.06.27 |
2.2 시그널 (0) | 2018.06.27 |
2.1 프로세스 (0) | 2018.06.27 |
1.6 파일 입출력 (0) | 2018.06.27 |
1.5 응용 프로그램 (0) | 2018.06.26 |