Wie schließe ich eine Win32::Pipe ?

Frankdfe

Erfahrenes Mitglied
Hallo,

ich habe das folgende Perl-Programm geschrieben, dass eine neue Pipe
erstellt, "aaa" in die Pipe schreibt und danach die Pipe schließt:


use Win32::pipe;
$| = 1;

$Pipe = new Win32::pipe( "MyPipe" ) ;
$Pipe->Connect();
$Pipe->Write("aaaaaaaaaaaaaaa\n");

sleep(10);
$Pipe->Disconnect();
$Pipe->Close();


Das Programm, das die Daten aus der Pipe liest ist in C geschrieben
und benützt zum lesen aus der Pipe die C-Funktion "ReadFile". Nach
dem Ausführen von $Pipe->Disconnect() meldet ReadFile den Fehler
"Pipe not connected". Falls ich die Pipe direkt mit $Pipe->Close
schliese oder das Programm beende, entsteht der gleiche Fehler. Ich
würde hier erwarten, dass ReadFile, das Ende der Pipe erkennt.

Wie kann ich der Pipe sagen, dass keine weiteren Daten mehr folgen?

Erstaunlicherweise, meldet ReadFile, dass das Ende der Pipe erreicht
ist, wenn ich das obige Perl-Programm während dem sleep(10)-Kommando
mit Ctrl+C oder "kill 9,pid;" beende.

Was passiert wenn ich das Programm mit Ctrl+C beende ( Filemonitor
sagt "PIPE BROKEN" ? Wie kann ich diese Verhalten mit Perl-Befehlen
nachbilden ?

MfG Frank
 
Pipe erstellen mit Win32API::File::CreateFile?

Falls mir niemand mit der Win32::pipe helfen kann, kann ich auch CreateFile() aus Win32API::File verwenden.

Hat hier jemand schon mal damit gearbeitet?

Ein einfaches Beispielprogramm(mit Schließen der Pipe) würde mir sehr helfen.
 

Neue Beiträge

Zurück