pipex 프로젝트: Unix 파이프라인의 C 언어 구현
Unix 시스템에서 파이프라인은 데이터를 한 프로세스에서 다른 프로세스로 효율적으로 전달하는 강력한 도구입니다. pipex 프로젝트는 이러한 파이프라인의 작동 원리를 C 언어로 구현한 것으로, 명령줄 인수를 통해 파일과 명령어를 받아 처리하는 프로그램입니다.
프로그램 실행 조건
pipex는 아래와 같이 실행되어야 합니다:
$> ./pipex file1 cmd1 cmd2 file2
- file1 에서 입력을 받아 cmd1 명령어를 실행합니다.
- cmd1 의 실행 결과는 cmd2 로 전달됩니다.
- cmd2 의 최종 결과는 file2 에 저장됩니다.
이 과정은 유닉스의 파이프라인(< file1 cmd1 | cmd2 > file2)과 동일한 작업을 수행합니다.
필수 조건
파일 접근
- 프로그램은 file1을 읽고 file2에 결과를 쓸 수 있는 권한이 있어야 합니다.
에러 처리
- 에러가 발생했을 때, 적절한 에러 메시지를 출력해야 합니다.
핵심 작업 명령어 및 함수
pipex 프로젝트에서 사용되는 중요한 시스템 호출과 함수들은 다음과 같습니다:
- perror: 에러 메시지를 출력합니다.
- strerror: 에러 번호에 해당하는 에러 메시지를 반환합니다.
- access: 파일의 접근 권한을 확인합니다.
- dup & dup2: 파일 디스크립터를 복제합니다.
- execve: 새로운 프로세스를 실행합니다.
- exit: 프로그램을 종료합니다.
- fork: 현재 프로세스를 복제하여 새로운 프로세스를 생성합니다.
- pipe: 데이터 전달을 위한 파이프를 생성합니다.
- unlink: 파일을 삭제합니다.
- wait & waitpid: 자식 프로세스의 종료를 대기하고 종료 상태를 받습니다.
구현 상세
pipex의 구현은 파일 디스크립터를 활용하여 입력 파일에서 명령어의 실행 결과를 읽고, 그 결과를 다음 명령어로 전달한 뒤 최종 출력을 파일에 저장하는 과정으로 이루어집니다.