2014-07-17 3 views
3

나는 이것에 잠시 머물 렀습니다. stdout을 두 곳으로 리다이렉트 할 수 있습니까? 연습을 위해 자체 셸을 작성 중이며 현재 ps aux | wc -l 또는 ps aux | wc -l > output.file과 같은 명령을 실행할 수 있습니다. 그러나 ps aux > file.out | wc -l을 실행할 때 두 번째 명령은 첫 번째 명령을받지 못합니다.표준 출력을 C의 두 위치로 리디렉션 할 수 있습니까?

마지막 예에서 첫 번째 명령은 파이프의 한쪽 끝으로 출력되는 하위 프로세스에서 실행됩니다. 논리는 다음과 유사합니다.

close(stdout); 
dup2(fd[1], STDOUT_FILENO); 

//If a file output is also found 
filewriter = open(...); 
dup2(filewriter, STDOUT_FILENO); 

//Execute the command 

답변

4

일반 UNIX 쉘은 해당 구문에서 작동하지 않습니다. UNIX (및 일부 다른 OS)는 stdout을 출력하기 위해 tee [1] 명령을 제공합니다.

예 : 이 ps aux | tee file.out | wc -l

[1] http://en.wikipedia.org/wiki/Tee_(command)

+0

아, 알겠습니다. 감사! – n0shadow

+1

'named pipe'라는 개념이 있습니다.이 개념은 때때로 매우 유용 할 수 있습니다. 프로세스 간 통신을 통해 매우 유용한 몇 가지 작업을 수행 할 수있는 명명 된 파이프 인 특수 파일을 만들 수 있습니다. 더 자세히 알고 싶다면 http://en.wikipedia.org/wiki/Named_pipe – JohnH

+0

좋아요, 한번 살펴 보겠습니다. – n0shadow

2

tee 명령은 그 UNIX에서 바로 수행을 참조하십시오. 똑바로 C로하는 방법을 보려면 tee's source code을 보시지 않으시겠습니까?

관련 문제