2 Named Pipe in einem Prozess verwenden

M

macke_a

Mitglied
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
 
soweit ich mich erinnere kann nur der ersteller in eine named pipe schreiben:think:
 
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...
 
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
 
Ich wüsste nicht warum das nicht möglich sein soll. Aber kannst du vielleicht hierzu nochmal was sagen:

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

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

Gruß
D.
 
Vielleicht hat irgendwer noch eine Antwort, die meine Frage beantworten könnte..?

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...
 
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?
 
der quelltext würde bei der fehleranalyse helfen ... aber wenn nichtmal "kill -9" den pozess beenden kann liegt irgentetwas im argen!
 
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...
 
Zuletzt bearbeitet:
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.
 
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
 

Ähnliche Themen

Named Pipes Probleme

Compileroptionen

Zurück
Oben