Ist es möglich, einem Programm, das einen Dateinamen als Argument erwartet, eine ge-pipe-de Ausgabe eines anderen Programmes unterzujubeln? programm1 | programm2 falsche.datei ausgabe.datei
In Unix/Linux geht das mit so genannten named pipes. Diese liegen wie Dateien im Filesystem und können wie Dateien geschrieben und gelesen werden. Auch in Windows gibt es etwas, was den Namen named Pipe trägt: http://msdn.microsoft.com/en-us/library/aa365590.aspx Ob man damit das von dir Gewünschte realisieren kann, geht aus dem Artikel leider nicht hervor. Die Beispiele sind alle so beschaffen, dass sowohl Datenquelle als auch Datensenke speziell für die Pipe-Kommuni- kation programmiert werden, was in deinem Fall natürlich nicht möglich ist. Aber du kannst ja mal nach dem Begriff googeln, vielleicht gibt es anderswo eine klarere Aussage, was mit diesen Pipes möglich ist und was nicht. Wenn du Pech hast, sind die named Piped eines dieser häufig anzutreffen- den Windows-Features, bei denen Microsoft den Namen zwar zu 100%, die Funktionalität aber nur zu 20% von anderen Betriebssystemen übernommen hat. Vielleicht gibt die neue PowerShell von Microsoft auch etwas mehr her. Zitat aus Wikipedia: "Die auf dem .NET-Framework in der Version 2.0 basierende Windows PowerShell verbindet die aus Unix-Shells bekannte Philosophie von Pipes und Filtern mit dem Paradigma der objektorientierten Programmierung." Die PowerShell kann, auch für XP, kostenlos heruntergeladen werden. Nur so am Rande: Unter Linux/Bash gibt auch noch das Konzept der Process Substitution, bei dem die Named Pipe nicht explizit angelegt werden muss und die beiden Programme zusammen in einer Eingabezeile gestartert werden können. Für dein Beispiel würde man einfach programm2 <(programm1) ausgabe.datei schreiben. <(programm1) legt dabei automatisch eine temporäre named Pipe an, startet programm1 und lenkt dessen Ausgabe in die Pipe um. Die Pipe wird als erstes Argument dem programm2 übergeben, so dass dieses die Ausgabe von programm1 lesen kann.
PowerShell ist akademisches Spielzeug. Unpraktischer Mist, paßt sich nahtlos in die Windows-Shellseuche ein...
> Ist es möglich, einem Programm, das einen Dateinamen als Argument > erwartet, eine ge-pipe-de Ausgabe eines anderen Programmes > unterzujubeln? Wenn die Ausgabe des anderen Programmes ein Dateiname ist, ja. Ansonsten geht das nur, wenn das eine Programm seine Eingaben via stdin erwartet - das ist unter *nix auch nicht anders. "Named Pipes" haben mit dem Pipesymbol des Kommandozeilenprozessors nichts zu tun, sondern sind ein Mechanismus zur Interprozesskommunikation auch im Netzwerk. Sockets gegenüber haben "named pipes" den Vorteil, daß sie auch paketorientiert betrieben werden können, daß also im Gegensatz zu den streamorientierten Sockets keine Paketseparation auf der Empfängerseite betrieben werden muss (was interessant ist, wenn man ein paketorientiertes Protokoll implementieren möchte). Damit entspricht --unabhängig von der Paketgröße-- eine Schreiboperation einer Leseoperation auf der Gegenseite. Allerdings hat MS die simultane Nutzbarkeit von "named pipes" mit jeder neueren Windows-Version immer weiter reduziert; unter NT 3.51 gab es praktisch kein Limit, während auch unter den aktuellen Serverversionen "named pipes" im größeren Stile (mehr als etwa 10..20 simultane Verbindungen) praktisch unbenutzbar sind.
> PowerShell ist akademisches Spielzeug. Unpraktischer Mist
Gilt das nicht für Windows insgesamt? ;-)
Ich habe die PowerShell noch nicht ausprobiert, aber immerhin scheint
sie ein paar Features mehr zu haben als das aus DOS-Zeiten stammende
cmd.exe und ist damit eher in der Lage, Egals Problem zu lösen. Aber
wahrscheinlich geht es auch damit nicht, sonst hätte sicher schon eine
Horde von Uberwindowsfreaks diesen Thread eingerannt :)
Egal wrote: > Ist es möglich, einem Programm, das einen Dateinamen als Argument > erwartet, eine ge-pipe-de Ausgabe eines anderen Programmes > unterzujubeln? > > programm1 | programm2 falsche.datei ausgabe.datei Ja, wenn programm1 die Ausgabe von programm2 benutzen soll braucht das ganze nur umgedreht zu werden programm2 falsche.datei ausgabe.datei | programm1
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.