Named Pipes Probleme

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von macke_a, 05.07.2007.

  1. #1 macke_a, 05.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Hallo!

    Ich versuche seit ein paar Tagen vergeblich ein Pipe zwischen zwei Prozessen aufzubauen. Das Problem ist, dass ich eine unidirektionale Verbindung zu 100% hin bekomme, nur eine bidirektionale nicht!

    Ich habe jeder PIPE einen unterschiedlichen Namen zugeteilt. Sobald ich jetzt die Daten von Prozess1 nach Prozess2 schreibe und wieder von Prozess2 nach Prozess1 zurück schreibe, läuft mein Programm nicht mehr!

    Meine Sende PIPE:

    main()
    {
    int ein;
    int hilf;
    char outbuffer[2];
    int fd;
    int lese;

    do
    {
    fd = open("MY_PIPE",O_RDONLY);
    if (fd==-1)

    sleep(2);
    } while (fd==-1);
    while(1)
    {
    lese=read(fd,outbuffer,2);
    if (lese==0) break;

    // Hier verwende ich meine outbuffer weiter

    sleep(2);
    }
    unlink("MY_PIPE");
    return 0;
    }


    Meine Empfangs PIPE:

    main()
    {
    int ein;
    int hilf;
    char inbuffer[2];
    int fd;

    mkfifo("MY_PIPE",0666);
    fd = open("MY_PIPE",O_WRONLY);

    for(hilf=0;hilf<10;hilf++)
    {
    inbuffer[0]=48+hilf;
    write(fd,inbuffer,2);

    // Hier verwende ich meinen inbuffer

    sleep(1);
    }
    return 0;
    }


    So jetzt habe ich jeweils in einem Prozess diesen Sende- und Empfangs- Buffer, die PIPE NAMEN habe ich dementsprechend angepaßt!

    Kann mir jemand weiter helfen ??
    Das wäre echt toll!

    Danke schon mal im Voraus!!

    Mfg macke_a
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. b00

    b00 Haudegen

    Dabei seit:
    28.03.2007
    Beiträge:
    597
    Zustimmungen:
    0
    Ort:
    /root
    ich habe schon lange nicht mehr mit named pipes gearbytet, doch glaube ich mich zu erinnern dass named pipes nur in eine richtung geht. wie währe es zu versuchen eine zweite pipe als rückkanal ein zu richten?
     
  4. #3 macke_a, 05.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Korrekt "named pipes" gehen nur in eine Richtung!
    Deswegen habe versucht eine weitere unabhängige Pipe durch den unterschiedlichen PIPE NAMEN aufzubauen.

    Dies sollte doch funktionieren...
     
  5. b00

    b00 Haudegen

    Dabei seit:
    28.03.2007
    Beiträge:
    597
    Zustimmungen:
    0
    Ort:
    /root
    ok was meinst du mit ".., läuft mein Programm nicht mehr!.." eventuell deadlock?
     
  6. #5 macke_a, 05.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Ein Deadlock entsteht, wenn mehrere Prozesse sich gegenseitig so beeinflussen das keiner von ihnen in der Lage ist seine Aufgabe bis zum Ende auszuführen!

    Darüber hab ich auch schon nachgedacht ! Ich habe die Pipe nach Beendigung des Schreib- und Lesevorgangs mit einem close() explizit abgeschlossen. Dies müsste eigentlich ausreichend sein um den Deadlock zu verhindern !

    Mein Programm hängt sich auf! Erst durch einen Reset kann ich den Urzustand wieder bekommen...
     
  7. b00

    b00 Haudegen

    Dabei seit:
    28.03.2007
    Beiträge:
    597
    Zustimmungen:
    0
    Ort:
    /root
    ok
    1. welches programm hängt sich auf sender/empfäner/beide?
    2. RESET? meinst du jezt einen ECHTEN HW reset (was sagt "kill")?
    3. prüfe ob wirklich close ausgeführt wird!

    auch kann ein zu frühes close zum datenverlust in der pipe führen oder schlimmeres(deadlock).
     
  8. #7 macke_a, 05.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    zu 1) Prozess 1 sendet an Prozess 2, danach sendet Prozess 2 nach Prozess 1. Das Programm hängt sich auf wenn Prozess 2 nach Prozess 1 sendet. Ich will eine Halbduplexverbindung aufbauen.

    zu 2) Einen echten HW muss ich ausführen !

    zu 3) wie soll ich das mit dem close() überprüfen ? close befindet sich immer am Ende des Programms über sleep!

    Anscheinend kennst Du dich mit dem Thema aus. Ich habe schon viel über fork() gelesen, Vater - Kind Prozess.
    Wäre das ne bessere "Vollduplex - Lösung" ?
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. b00

    b00 Haudegen

    Dabei seit:
    28.03.2007
    Beiträge:
    597
    Zustimmungen:
    0
    Ort:
    /root
    wirklich auskennen tuh ich mich damit nicht :(
    ja named pipes sind wohl die schlechteste idee sowas um zu setzen.
    ich würde dass eher mit IP machen, schöner nebeneffekt es ist gleich netzwerkfähig!
     
  11. #9 macke_a, 05.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Naja ich bin auch mehr der Leie...

    Vielleicht hat jemand anders nen Lösungsansatz..!
     
Thema:

Named Pipes Probleme

Die Seite wird geladen...

Named Pipes Probleme - Ähnliche Themen

  1. Pipes und Named Pipes

    Pipes und Named Pipes: Hallo zusammen, ich habe mich gerade mit Pipes und Named Pipes zur Kommunikation zwischen Prozessen beschäftigt. Allerdings ist mit nicht ganz...
  2. Named Pipe und Lighttpd

    Named Pipe und Lighttpd: Hey, ich habe ein kleines Problem, bei dem ich nicht weiß, wie ich vorgehen soll. Im Prinzip ist mein Anliegen nicht schwer (denke ich mal). Auf...
  3. Endlosschleife /var/named/chroot

    Endlosschleife /var/named/chroot: Hallo, ich habe ein kleines Problem auf meinem Root Server mit Centos 6.2 habe ich seit neustem eine Endlosschleife in dem Verzeichnis...
  4. "No module named PyQt4" bei Installation von deskutils/calibre

    "No module named PyQt4" bei Installation von deskutils/calibre: Hallo! Wenn ich versuche den port für calibre zu installieren erhalte ich folgende Ausgabe: ===> Building for calibre-0.8.5 Traceback...
  5. Zonen aus named.conf löschen

    Zonen aus named.conf löschen: Moin, ich bin derzeit dabei, 130 Domains zu löschen und muss diese jetzt auch aus der named.conf werfen. Bei der Gelegenheit wollte ich das...