2009-09-14 3 views
0

나는 마침내 stdin과 stdout을 주 앱과 CreateProcess (win32) 또는 exec (linux)로 만든 프로세스 사이에 파이프하는 방법을 연구했다. 이제 앱의 파이핑 특성을 활용하는 데 관심이 있습니다. 내가 "그렙"을 실행하려면, (내 C++ 응용 프로그램의 버퍼에있다) 그것에 "file.txt를"의 내용을 전송,C + +로 처리 할 파이핑

eg: cat file.txt | grep "a" 

: 나는 실행하고 응용 프로그램은로 파이프 할 수 있습니다 어떻게해야합니까? 나는 그것을 표준으로 낮추지 않거나 틀렸다고 가정한다. 그게 내가하는 일이야?

+0

효율성과 일반적인 영리성을 향상 시키려면 grep "a"

답변

1

네, 그게 정확히 당신이 : stdin에서 읽고 stdout에 써주세요.

리눅스의 천재성 중 하나는 입력과 출력을 거의 쉽게 리디렉션하는 것입니다. 응용 프로그램이 아주 단순하고 기본적인 규칙을 따르는 한. 예 : 데이터를 stdout으로 보내고 오류 또는 정보 메시지를 stderr으로 보냅니다. 따라서 사용자가 상태를 쉽게 추적 할 수 있으며 앱을 사용하여 데이터를 파이프로 보낼 수 있습니다.

myapp | tail -n 5 > myapp.data # Save the last 5 lines, display msgs 
myapp 2> myapp.err | sort  # Sort the output, send msgs to a file 
myapp 2> /dev/null    # Throw msgs away, display output 
myapp > myapp.out 2>&1   # Send all output (incl. msgs) to a file 

리디렉션 약간 처음에는 혼동 될 수 있지만 시간이 소요 학습이 잘 가치가있을 것입니다 찾을 수 있습니다 :

또한 독립적으로 (stderr에서) (stdout에서) 데이터와 메시지를 리디렉션 할 수 있습니다 그것!