www.mikrocontroller.net

Forum: PC Hard- und Software Pipes in Windows | Datei simulieren


Autor: Egal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PowerShell ist akademisches Spielzeug. Unpraktischer Mist, paßt sich 
nahtlos in die Windows-Shellseuche ein...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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 :)

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.