본문 바로가기
한국으로/임베디드 리눅스

3.1 파이프

by 영킴. 2018. 6. 27.

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