pipex
멀티 프로세싱, 프로세스 간 통신
fork, pipe 시스템 콜을 활용하여 셸의 파이프(|) 기능을 구현하는 과제이다.
- 과정: 42 Seoul Inner Circle
- 언어: C
- GitHub: https://github.com/Budnarae/42_innercircle_course/tree/main/pipex
개요
셸에서 아래와 같이 파이프를 사용하면 앞 명령어의 출력이 뒤 명령어의 입력으로 연결된다.
< infile ls -l | wc -l > outfilepipex는 이와 동일한 동작을 아래 형식의 실행 파일로 구현한다.
./pipex infile "ls -l" "wc -l" outfile구현 내용
파이프라인 실행 모델
pipe로 프로세스 간 통신 채널을 만들고, fork로 자식 프로세스를 생성한다. dup2로 자식 프로세스의 표준 입출력을 파이프 또는 파일로 교체한 뒤, execve로 실제 명령어를 실행한다. 앞 명령어의 표준 출력이 파이프를 통해 뒤 명령어의 표준 입력으로 흘러가는 구조다.
PATH 기반 실행 파일 탐색
명령어 이름만 주어졌을 때 환경 변수 PATH에 등록된 경로들을 순서대로 탐색하여 실행 파일의 절대 경로를 찾는다.
보너스: 다중 파이프라인
2개 이상의 명령어를 이어 실행할 수 있다.
< infile cmd1 | cmd2 | cmd3 | ... | cmdn > outfile./pipex infile cmd1 cmd2 cmd3 ... cmdn outfile보너스: heredoc
셸의 << 연산자와 동일하게, 지정한 구분자(LIMITER)가 입력될 때까지 표준 입력을 읽어 첫 번째 명령어의 입력으로 전달한다. 출력은 outfile에 이어쓰기(>>)한다.
cmd << LIMITER | cmd1 >> file./pipex here_doc LIMITER cmd cmd1 file