Thread Win32 - Pipe erzeugung funktioniert nicht (3 answers)
Opened by Snicker at 2008-10-07 14:18

Snicker
 2008-10-07 14:18
#115243 #115243
User since
2008-08-09
25 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich habe einen Prozess, den ich kontrolliert forken will. Das Forken funktioniert auch einwandfrei. Das Problem ist die Steuerung der geforkten Prozesse. Hierzu möchte ich mittels Pipes das ganze kontrollieren. Da ich als Betriebssystem Windows XP benutze muss ich Win32:Pipe verwenden.

Das Problem liegt darin, dass kein einziger Pipe erzeugt wird. Die fork-Prozesse werden alle erfolgreich gestartet, aber es wird kein Pipe erzeugt. Erhalte auch über den die Befehl keine Meldung, dass die Pipeerzeugung nicht funktioniert hat.

Im Konsolenfenster erhalte ich die Meldung:
bin ein Childprozess
bin ein Childprozess
bin ein Childprozess
bin ein Childprozess

sorry, i cannot find the pipe: My Pipe Name 0 at D:\.....\Open65.pl line 482






Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use Win32::Pipe;

while ($q < ($einstellungen_para_wert[12] * $einstellungen_para_wert[13])){
    $pid = fork() ;
    unless (defined $pid) {
        die "Could not fork $!";
    }
    #---------------------------------------------------------------------------
    #   Hier beginnt der Child-Prozess
    #---------------------------------------------------------------------------
    elsif ($pid < 0){
        print "bin ein Childprozess\n",
        $Pipe = new Win32::Pipe("My Pipe Name $q") or die "sorry, i cannot creat a pipe";
        print "Pipe wurde erfolgreich erschaffen";
        $Result = $Pipe->Connect() or die "sorry, i cannot connect to the pipe";
        $Result = $Pipe->Write("Howdy! This is cool!") or die "sorry, i cannot write in the pipe";
        $Pipe->Disconnect() or die "sorry, i cannot disconnect to the pipe";
        
        #Hier läuft das Programm mittels dem [i]system()[/i] Befehl 
        
        $Result = $Pipe->Connect();
        $Result = $Pipe->Write("Now i´m ready!");
        $Pipe->Disconnect();

        exit(0);
    }
    #---------------------------------------------------------------------------
    #   Hier beginnt der Parent-Prozess
    #---------------------------------------------------------------------------
    else{
        while ($k1 == $einstellungen_para_wert[12] ){
            for ($op = ($q - ($k1 - 1)); $op < ($q ); $op++){
                $Pipe = new Win32::Pipe("\\\\server\\pipe\\My Pipe Name $op") or die "sorry, i cannot find the  pipe: My Pipe Name $op"; #line 482
                $Result = $Pipe->Connect();
                $Data = $Pipe->Read();
                $Pipe->Disconnect();
                if ($Data eq "Now i´m ready!"){
                    $k1--;
                    $Data->Close();
                    wait;
                }
            }
            Win32::Sleep 100;   #Programm pausiert 0,1 Sek. sonst beansprucht Perl die frei werdenen Ressourcen.
        }
        $k1++;
        $q++;
    }
}

View full thread Win32 - Pipe erzeugung funktioniert nicht