PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit beim Lesen einer Pipe (O_NONBLOCK)



WWG2000
04-10-2001, 21:13
Hallo allerseits.

Ich hab ein kleines Problem, und zwar hab ich eine in einem Programm via pipe einen Datenkanal geöffnet. Schreiben kann ich dort ohne Probleme, das Lesen funktioniert ja auch, nur leider blockiert mein Programm wenn keine Daten mehr anliegen.
Ich weiß wohl, dass ich das mit dem O_NONBLOCK Flag regeln kann, aber ich hab es einfach nicht hinbekommen.

Ich benutze meine pipe wie folgt:


if (pipe(fd_for_out)!=0)
{
printf("can't create a pipe\n");
exit(-1);
}
....
if ((retval=fork())==0)
{
...
write(fd_for_out[1], buf_at_int, strlen(buf_at_int));
}
.....
while(1)
{
read(fd_for_out[0], buf_at_ext, 2);
}


Ich hab auch schon folgendes von der read-Funktion versucht:

fcntl(fd_for_out[1],F_SETFL,O_NONBLOCK);


Ich hoffe mir kann jemand helfen wie ich das hinbekommen könnte.

micha
04-10-2001, 21:24
Hallole,

vielleicht hilft Dir das hier (http://www.pronix.de/ckurs/23ea1.html) weiter ?

Gruß micha

WWG2000
05-10-2001, 06:32
<BLOCKQUOTE><font size="1" face="Arial,Helvetica,Geneva">Zitat:</font><HR>Original erstellt von micha:
<STRONG>Hallole,

vielleicht hilft Dir das hier (http://www.pronix.de/ckurs/23ea1.html) weiter ?

Gruß micha</STRONG>[/quote]

Ne ich glaub damit kann ich weniger was anfangen. Ich will eigendlich die Pipe lesen, worüber Eltern und Kindprozesse sich unterhalten.

Ich hatte auch Probleme die Seite jetzt darzustellen (bin auf der Arbeit.). Aber bei mir zu hause läuft die Seite (kannte ich schon).

Wäre für weitere Tipps dankbar

jgbauman
05-10-2001, 10:31
Vielleicht solltest Du auch den richtigen file deskriptor auf NON_BLOCK setzen, naemlich des von dem Du liest.

fcntl(fd_for_out[0],F_SETFL,O_NONBLOCK);
und nicht
fcntl(fd_for_out[1],F_SETFL,O_NONBLOCK);