2009-07-11 3 views
0

* nix 파일 이름을 인수로 허용하는 많은 명령 줄 응용 프로그램도 파이프를 허용합니다. 예 :Windows에서 명명 된 파이프를 사용하는 경우?

anApplication file.txt 

또한 리디렉션

anApplication | anotherApplication arguments 

그리고 "anotherApplication"의 결과와 함께 작동 "anApplication"그것은 내가 배운 파일

이었다으로 해당이의 윈도우에 해당 "명명 된 파이프"입니다. 명령 줄 응용 프로그램이이를 이해하기 위해 명명 된 파이프를 알고 있어야하는지 또는 인수로 파일을 받아들이는 명령 줄 응용 프로그램이 명명 된 파이프로 대신 작동하는지 궁금합니다.

답변

9

당신은 꽤 거꾸로있어. 그냥 정확합니다 :

anApplication file.txt 

이 첫 번째 명령 행 인수로 파일 이름 file.txtanApplication 실행됩니다.

anApplication | anotherApplication arguments 

명령 줄 인수없이 anApplication을 실행합니다. 표준 출력은 anotherApplication의 표준에 연결되어 있으며, 이는 arguments으로 명령 행 인수로 실행됩니다. 이것은 유닉스 버전에서와 똑같은 윈도우에서 똑같다. 명명 된 파이프는 완전히 다른 OS 기능입니다.

명명 된 파이프는 파일처럼 보이지만 출력 및 입력을 첨부 할 수있는 데이터 스트림처럼 작동하는 디렉토리 항목입니다.

1

AFAIK Windows에서 UNIX와 동일하게 작동합니다. 좀 더 진보 된 Win32 콘솔 API 함수가이를 우회 할 수 있다고 생각합니다.하지만 그 문서를 읽어야합니다.

1

이것은 cmd.exe의 구문입니다.

이러한 종류의 파이프 리디렉션은 특정 질문에 대답하기 위해 어떤 프로그램과도 작동해야합니다. 표준 콘솔 응용 프로그램 인 경우 특별한 코드가 필요하지 않습니다.

주의 사항 - 프로그램이 런타임 API 모니터링 형식의 특수 키보드 모니터링을 통해 입력되는 경우 리디렉션이 작동하지 않습니다.

4

Windows에서 named pipe은 당신이 말하는 것과는 아주 다른 것입니다. 명명 된 파이프는 실제로 Windows에서 서버 응용 프로그램을 빌드하는 데 도움을주는 도구이며 대략 "Unix 도메인 소켓"과 같습니다.

이 상황에서 anApplication이 작동하는지 여부는 명령 줄에서 파일 이름없이 실행될 때 응용 프로그램이 어떻게 반응하는지에 따라 다릅니다. (나는 당신의 설명에서 배열에 대해 말하고 있는데, 커맨드 라인은 다른 대답에 의해 지적 된 바와 같이 거꾸로되어있다.) 애플리케이션이 명령 행없이 시작될 때 stdin에서 읽으면, 이런 종류의 쉘 파이프 정렬이 가능할 것이다. 대신 응용 프로그램이 도움말 메시지를 인쇄하고 파일 이름없이 시작하면 종료됩니다. 그러면이 셸 파이프가 작동하지 않습니다.