"dmesg | more" 실행 도중에 more에서 사용자 입력(stdin)을 받을 수 있는 이유
글쓴이: gyxor / 작성시간: 일, 2006/11/05 - 1:03오전
1 #include<stdio.h>
2
3 int main()
4 {
5 int n;
6 int p[2];
7 char *arg1[] = {"dmesg", (char *)0};
8 char *arg4[] = {"more", (char *)0};
9
10 pipe(p);
11
12 n = fork();
13 if(n == 0)
14 {
15 dup2(p[1], 1);
16 execvp(arg1[0], arg1);
17 }
18 else{
19 waitpid(n);
20 close(p[1]);
21 dup2(p[0], 0); // <<----- stdin is replaced by p[0]
22 execvp(arg4[0] , arg4);
23 }
24 return 0;
25 }위 코드를 실행하면 dmesg | more 가 실행이 됩니다.
그런데
dmesg 의 출력(stdout)은 pipe의 input으로 dup시켰고
more의 입력(stdin)은 pipe의 output에서 받도록 dup 시켰습니다.
즉, more에서 stdin은 사라졌음에도
실행과정에서 사용자로부터 입력을 받는것을 볼 수 있는데요
이것이 가능한것은 어떻게 구현이 된것인가요? pipe로 부터 입력을 다 읽어들인 후에 새로 stdin을 생성한것인가요?
답변부탁드립니다
Forums:


Quote: After a successful
파일 디스크립터를 복제(duplicate)하는 함수라서 그러는 것 같습니다. 다른 함수를 쓰셔야겠네요..
dup2()후에 표준입력을
dup2()후에 표준입력을 닫아주시면 될듯한데요?
close(0);
댓글 달기