2011-10-23 3 views
0

명령 줄 셸과 응용 프로그램 사이에 파이프를 만들려고합니다. 내가 뭘하려고 오전 http://pastebin.com/uupd4aXiStdin/Stdout 리디렉션, 입력이 작동하지 않습니다.

는 표준 입력에 "WHOAMI"를 작성하고 그 명령에 반환 상당을 얻을 수 있습니다 :

내가 지금까지 가지고있는 코드입니다. writeinput 함수를 주석 처리하면 readoutput이 표준 cmd 출력을 성공적으로 인쇄합니다. 나는, writeinput가에서 무한 루프에 걸리면하지 않는 그러나 경우 :

for (;;) 
    { 

     bSuccess = WriteFile(hSTD_IN_WRITE, chBuf, sizeof(chBuf), &dwWritten, NULL); 
     if (! bSuccess) break; 
    } 

나는 여전히 cmd를 인쇄물 메시지를 받고 있지만하고는 if 문을 제거하고 수동 루프에 휴식을 일으킬 경우 내 명령 "whoami"에 응답.

내가 뭘 잘못하고 있니?

답변

1

redirecting both stdin and stout but processing them serially의 트랩을 실행 중입니다.

whoami 프로그램을 실행하고 출력을 캡처하는 경우 cmd.exe이 필요하지 않으며 whoami.exe을 입력으로 사용해보십시오. whoami.exe을 직접 실행하고 출력을 캡처하면됩니다.

+0

답변을 주셔서 감사합니다. 그러나 불행히도 "whoami"명령이 예제 일 뿐이므로 whoami.exe를 실행할 수 없습니다. "echo 1"의 결과를 원하면 어떻게됩니까? 그 문서 sais 버퍼링을 사용하지만, 정확히 무엇을 의미하지 않습니다, 당신이 나를 도울 수있다 –

+0

'cmd.exe/c echo 1'는 명령을 실행할 때 명령을 실행하지 않고 stdin을 통해 데이터를 펌프합니다. 그것은 또한 깃발을 없애 버려서 돌 하나가 두 마리 나됩니다. –

+0

감사! 마침내 작동했습니다. 이것이 나에게 해결 방법을 보이는 것처럼 보이지만 확실히 그 일을합니다. 그러나 나는 그것을 할 수있는 '적절한'방법을 찾기 위해 호기심이 생길 것입니다. –

관련 문제