dup 함수가 하는일은 실제로 간단하다. 단순히 파일지정번호를 복사하는 일이다. 그런데 솔직히 말해서 "dup는 파일지정번호를 복사하기 위해서 사용한다" 라고 해보았자.. 도대체 이걸 어디에 사용할수 있을지, 절대 감이 오질 않는다.
이래서야 쓰고 싶어도 써먹을수가 없으니 보통 슬픈일이 아니다. 그래서 이번문서에서는, 몇가지 예를 들어서 dup 의 활용방법에 대해서 고민? 을 해보고자 한다.
일단은 dup 함수에 대해서 알아보겠다.
dup 에는 2가지 함수가 있다. 바로 dup() 와 dup2() 인데 다음과 같이 사용할수 있다.
2개의 함수가 하는 일은 같다. 다만 dup2 의 경우에는 복사할 새로운 파일지정번호를 지시할수 있는반면, dup 의 경우는 커널에서 자동으로 할당해준다는 점이 다르다. dup 를 사용하게 되면 남는 파일지정번호중 가장 작은 번호로 자동할당 된다. dup 혹은 dup2(이하 dup계열) 함수를 사용해서 파일지정자를 복사했을경우 디 파일지정자들은 락, 파일위치, 플래그등을 서로 공유하게 된다.
위에서 살펴보았듯이, dup 함수의 기본개념자체는 간단하긴 하지만 이걸 어디에 사용할수 있을런지가 애매모호 하다. 도대체 파일지정자를 공유해서 무얼할수 있는거지? 란 생각을 하게 될것이다.
그래서 이번장에서는 dup 를 통한 간단한 예를 들어보도록 할것이다.
예를 통해서 구현하고자 하는 내용은 바로 쉘의 리다이렉션(재지향) 기능이다. 우리는 쉘을 사용하면서 다음과 같은 재지향 기법을 흔하게 사용할것이다.
여기에서 나느 리다이렉션 기능을 가지는 테스트용 간이 쉘(:12)을 만들 것이다. 이 간이 쉘은 명령을 내릴경우 해당 명령을 fork&exec 기법으로 실행한다.
쉘을 제대로 구현하는 것은 너무 많은 노력과 시간이 드는 작업이므로 여기에서는 dup 의 활용에 촛점을 맞추어서 단지 단일 명령을 실행인자 처리 없이 실행시키는 기능과, 재지향 중 "<", 즉 파일을 읽어서 명령어로 보내는 기능만을 가지는 간단한 쉘을 만들것이다.
예제 : dup_sh.cc
Contents
1. dup 활용
1.1. dup에 대햐여
1.2. dup을 이용한 재지향 구현
1. dup 활용
1.1. dup에 대햐여
1.2. dup을 이용한 재지향 구현
Recent Posts
Archive Posts
Tags