이전까지는 과제를 진행하면서 레퍼런스를 참고하는 것을 마다하지 않았다. 과제를 해결하는 방법이 담긴 블로그와 가이드들은 답답한 속을 뻥 뚫어주었지만~~(고구마 백만 개 먹다가 사이다 원샷하는 기분..)~~ 어느 순간부터는 내가 스스로할 수 있는 생각의 폭을 좁히는 데에도 한 몫한다는 걸 느꼈다.
그래서인지 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
에 입력한다.