2009-07-11 3 views
0

In * nix viele Befehlszeilenanwendungen, die Dateinamen akzeptieren, akzeptieren auch Argumente. Beispiel:Wann sollten Named Pipes in Windows verwendet werden?

anApplication file.txt 

arbeitet auch mit

anApplication | anotherApplication arguments 

Und das Ergebnis der „anotherApplication“ wird umgeleitet „anApplication“, wie es eine Datei

war ich gelernt, dass das Windows-Äquivalent zu dieser ist eine "Named Pipe". Ich frage mich, ob die Befehlszeilenanwendung benannte Pipes kennen muss, um sie zu verstehen, oder ob eine Befehlszeilenanwendung, die eine Datei als Argument akzeptiert, stattdessen mit einer Named Pipe arbeiten würde.

Antwort

9

Sie haben das ziemlich rückwärts. Gerade um genau zu sein:

anApplication file.txt 

Dies läuft anApplication mit dem Dateinamen file.txt als erstes Befehlszeilenargument.

anApplication | anotherApplication arguments 

Dies läuft anApplication ohne Befehlszeilenargumente. Der Standardausgang ist mit dem Standard in anotherApplication verbunden, der mit arguments als Befehlszeilenargumente ausgeführt wird. Dies ist unter Windows genauso wie unter Unix-Versionen. Benannte Pipes sind ein völlig anderes OS-Feature.

Eine benannte Pipe ist ein Verzeichniseintrag, der wie eine Datei aussieht, sich jedoch wie ein Datenstrom verhält, an den Sie Ausgaben und Ausgaben anhängen können.

1

AFAIK es funktioniert das gleiche unter Windows wie in UNIX. Ich nehme an, dass einige erweiterte Win32 Console-API-Funktionen dies möglicherweise umgehen, aber Sie müssen die Dokumentation dafür lesen.

1

Beachten Sie, dass dies die Syntax von cmd.exe ist.

Diese Art von Rohrumleitung sollte mit jedem Programm funktionieren, , also um Ihre spezifische Frage zu beantworten, benötigt das Programm keinen speziellen Code, wenn es eine Standardkonsolenanwendung ist.

Es gibt eine Einschränkung - wenn das Programm über die speziellen Tastaturüberwachungsformulare der Laufzeit-API Eingaben erhält, funktioniert die Umleitung nicht.

4

Ein named pipe unter Windows ist eine ganz andere Sache als das, worüber Sie reden. Eine Named Pipe ist eigentlich ein Tool, das beim Erstellen von Serveranwendungen unter Windows hilft und entspricht in etwa einem "Unix-Domain-Socket".

In Ihrer Situation, ob anApplication in dieser Situation funktioniert, hängt davon ab, wie die Anwendung reagiert, wenn ohne einen Dateinamen in der Befehlszeile ausgeführt wird. (Ich spreche über die Anordnung in Ihrer Beschreibung; die Befehlszeile ist rückwärts, wie durch eine andere Antwort angezeigt.) Wenn die Anwendung von stdin liest, wenn ohne eine Befehlszeile gestartet wird, wird diese Art von Shell-Pipe-Anordnung funktionieren. Wenn die Anwendung stattdessen eine Hilfemeldung ausgibt und nach dem Start ohne einen Dateinamen beendet wird, funktioniert diese Shell-Pipe nicht.