이전까지는 과제를 진행하면서 레퍼런스를 참고하는 것을 마다하지 않았다. 과제를 해결하는 방법이 담긴 블로그와 가이드들은 답답한 속을 뻥 뚫어주었지만~~(고구마 백만 개 먹다가 사이다 원샷하는 기분..)~~ 어느 순간부터는 내가 스스로할 수 있는 생각의 폭을 좁히는 데에도 한 몫한다는 걸 느꼈다.
그래서인지 pipex는 시간이 오래 걸리더라도 여기저기 박으면서 천 천 히 해보자 는 무언의 다짐과 함께 시작했다. 덕분에 기준 시간(50 hours)의 배가 되는 시간을 할애했고, ‘이거 이렇게 하는 거 아닌데’ 라는 말을 가장 많이 들은 과제로 등극하기도 했지만, 정말정말 의미있는 시간이었다고 생각한다. ^3^
본격적으로 과제를 시작하기 전에 해당 과제에 필요한 개념들부터 공부하기 시작했다. 프로세스부터 시작해서 파이프와 리다이렉션 등등의 개념들을 접했고, 대략적으로 다음과 같은 정보를 습득할 수 있었다.
ls, cat... 이런 명령어들 조차도 모두 파일 형태로 관리된다.fork 함수를 사용하면 되는데, 이때 현재 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라고 부른다.exec 계열 함수는 인자로 받은 프로그램을 기존 프로세스 대신 실행한다. 단 새로운 프로세스가 현재 위치에 덮어씌워져 현재 프로세스는 종료된다.wait 또는 waitpid 함수를 사용할 수 있다.dup2 함수로 구현한다.pipe 함수로 구현한다.우선 mandatory 부분에서는
< file1 cmd1 | cmd2 > file2 셸 명령과 똑같이 작동하는 프로그램을 만들어야 했다.
처음 봤을 때는 대체 무슨 명령인가 싶었는데, 파이프와 리다이렉션을 간단히 공부하고 나니 알 수 있었다.
< file1 cmd1 | cmd2 > file2 셸 명령은
file1에서 입력을 받아cmd1수행, 그 결과에cmd2를 수행한 결과를file2에 입력한다.