2 Named Pipe in einem Prozess verwenden

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

  1. #1 macke_a, 10.07.2007
    macke_a

    macke_a Mitglied

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

    Besteht die Möglichkeit zwei "Named Pipes" in einem Prozess zu verwenden?

    Die beiden NP´s haben unterschiedliche Namen, dementsprechend mussten sie doch auch unabhängig voneinander sein, oder ?

    Zum anderen möchte ich die eine Pipe nur zum "WRONLY" und die andere zum "RDONLY" haben.

    mkfifo("/tmp/guipipe",0666);
    fdgui = open("/tmp/guipipe",O_RDONLY);

    mkfifo("/tmp/zsepipe",0666);
    fdzse = open("/tmp/zsepipe",O_WRONLY);

    Diese beiden FIFO´s werden in einem Prozess erzeugt und sollen von zwei Prozessen aus genutzt werden.

    Nun, ich habe mal versucht beide FIFO´s zu nutzen, allerdings bekomme ich dann Probleme mit meinem Programm( NEUSTART MUSS ERFOLGEN)

    Ich möchte eigentlich nur bestätigt haben, ob es überhaupt möglich ist, zwei FIFO´s in einem Prozess zu initialisieren und in zwei Prozessen zu nutzen!

    Ich bin dankbar für jede Hilfe, da ich schon fast ne Woche an diesem Probleme sitze!

    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
    soweit ich mich erinnere kann nur der ersteller in eine named pipe schreiben:think:
     
  4. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    Denke doch. Unter Solaris z. B. sind alle Pipes bidirektional (im Unterschied zu Linux) und da kann ein anderer Prozess auch von der anderen Seite was reinschicken. Denke also, dass es prinzipiell moeglich sein sollte...
     
  5. #4 macke_a, 11.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Hallo !
    Mmhh, naja so richtig weiter bin ich jetzt auch noch nicht! Vielleicht hat irgendwer noch eine Antwort, die meine Frage beantworten könnte..?

    Danke...

    Mfg macke_a
     
  6. #5 madfool, 11.07.2007
    madfool

    madfool Tripel-As

    Dabei seit:
    12.08.2004
    Beiträge:
    192
    Zustimmungen:
    0
    Ich wüsste nicht warum das nicht möglich sein soll. Aber kannst du vielleicht hierzu nochmal was sagen:

    Ich verstehe nicht so richtig was du damit sagen willst, was für Probleme bekommst du?

    Gruß
    D.
     
  7. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    Die einzigen Fragen, die du gestellt hast, waren, ob man mehrere Pipes in einem Prozess haben kann und ob zwei Pipes mit verschiedenem Namen voneinander unabhaengig sind. Das ist beides mit ja zu beantworten...
     
  8. #7 macke_a, 11.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Hallo...folgende Probleme habe ich:

    Falls nur eine einziger Fifo genutzt wird, so habe ich die Möglichkeit die pipe zu beschreiben und beim anderen Prozess wieder auszulesen.
    Das klappt 100% !!

    Jetzt möchte ich aber in dem Prozess, wo ich lese einen zweiten Fifo haben der mir mir wiederum Daten zum schreiben übergibt.

    Sobald ich aber den zweiten Fifo mit in mein Programm bringe, funktioniert mein gesamter Prozess nicht mehr!

    Das Programm hängt sich weg. Nach einem harten Reset und Veränderung des Quelltextes (FIFO 2 heraus) geht der Urzustand wieder!

    Hat jemand ne Idee?
     
  9. b00

    b00 Haudegen

    Dabei seit:
    28.03.2007
    Beiträge:
    597
    Zustimmungen:
    0
    Ort:
    /root
    der quelltext würde bei der fehleranalyse helfen ... aber wenn nichtmal "kill -9" den pozess beenden kann liegt irgentetwas im argen!
     
  10. #9 macke_a, 11.07.2007
    Zuletzt bearbeitet: 11.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Na klar kann ich den Quelltext schicken...
    Allerdings sind das mittlerweile 2100 Zeilen...

    Was nun ?
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    OK...ich stell mal meinen Handler hier rein, den ich jede Sekunde aufrufe.

    int len,x,z,lage;
    int laenge,y = 0;
    char PUFFER[256] = {0};
    char REFPUFFER[256] = "FIRM";
    char BUFFTEST[9] = "BUFFTEST";

    void handler()
    {
    int size = 0;
    //***********TEIL1 ANF ********************************//

    if(x == 0) { fdgui = open("/tmp/guipipe",O_RDONLY);
    x = 1; }

    if(read(fdgui, PUFFER, 256 ) == -1)
    {}
    else {}

    if(strcmp(REFPUFFER,PUFFER) == 0) { funktionvier(); }

    //************TEIL1 END*********************************//
    //************TEIL2 ANF*********************************//

    if(y == 10)
    {

    laenge = strlen(BUFFTEST);
    fdzse = open("/tmp/zsepipe",O_WRONLY);

    if(fdzse == -1) { cssl_putdata(serial,"PIPE SHIT", 10); }
    else { cssl_putdata(serial,"PIPE GOOD", 10); }

    err3 = write(fdzse,BUFFTEST,laenge);

    if(err3 != -1 )
    { cssl_putdata(serial, BUFFTEST, laenge);
    }
    else if (err3 == -1)
    { cssl_putdata(serial,"FIFO SHIT", 10);
    }
    else {}

    y = 0;
    }
    y++;

    //************TEIL2 END*********************************//

    }

    Also, wenn ich den ersten Teil ohne den zweiten Teil programmiere, funktioniert dieser Einwandfrei. Sobald ich den zweiten Teil mit laufen lasse, geht der obere Teil (fdgui= read) nicht, sondern ausschließlich der Zweite!
    Die Ausgabe wäre dann PIPE GOOD und BUFFTEST


    Woran kann dies liegen!?

    Brauche dringend hilfe....ich verzweifle so langsam...
     
  11. Anzeige

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

    dpkg Mitglied

    Dabei seit:
    21.04.2007
    Beiträge:
    46
    Zustimmungen:
    0
    Ort:
    Linz
    So wie ich das sehe, wird hier alle 10 Handler-Aufrufe fdzse = open("/tmp/zsepipe",O_WRONLY); aufgerufen. Ein entsprechendes close() kann ich aber nicht finden. Du öffnest die Pipe also mehrmals, und das passt dem System anscheinend nicht.
     
  13. #11 macke_a, 16.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Hallo!
    Laut meinen Recherchen ist es leider n. möglich zwei File-Deskriptoren gleichzeitig zu überwachen. Demnach werde ich es mit dem Aufruf select versuchen müssen. Jetzt bin ich mir wiederum nicht sicher, ob ich mit select() einen Schreib - und Lese Deskriptor überwachen kann. Falls es geht, muss ich da etwas beachten? Erst den Schreiber dann den Leser abfragen? !

    Muss ich irgendwelche zeitlichen Aspekte berücksichtigen ?

    Anders wäre ist super gut, wenn ich ne Programmierbeispiel hätte, vielleicht hat jemand von Euch so etwas für mich? Bei Google war ich schon !

    Mfg macke_a
     
Thema:

2 Named Pipe in einem Prozess verwenden

Die Seite wird geladen...

2 Named Pipe in einem Prozess verwenden - Ähnliche Themen

  1. 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...
  2. 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...
  3. Named Pipes Probleme

    Named Pipes Probleme: Hallo! Ich versuche seit ein paar Tagen vergeblich ein Pipe zwischen zwei Prozessen aufzubauen. Das Problem ist, dass ich eine unidirektionale...
  4. 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...
  5. "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...