Prüfen, ob Pipe leer ist

Hallo
Ich weiß, ich bin eine Nervensäge in diesem Forum, aber ich hab halt Sommerferien. Hier meine Frage: Ist es möglich, festzustellen, ob eine Pipe Daten enthält? Mir gehts um stdin/stdout also 0/1. Wenn ich einfach schreibe

read(0,data,64);

wartet er bei leerer Pipe, bis etwas eingegeben wurde. Ob die Pipe leer ist, soll vorher festgestellt werden.
MfG,Stefan

Ich weiß, ich bin eine Nervensäge in diesem Forum, aber ich
hab halt Sommerferien. Hier meine Frage: Ist es möglich,
festzustellen, ob eine Pipe Daten enthält?

Zwei Möglichkeiten: du kannst das per select() mit einem Timeout von 0 (nicht NULL) prüfen, oder du kannst per fcntl(fd, F_SETFL, O_NONBLOCK) den entsprechenden file descriptor auf nicht-blockierenden I/O einstellen.

Zusatz:
non-blocking fd calls warten nicht, bis Daten vorhanden sind, sondern liefern möglicherweise auch 0 bytes zurück. Wenn du alles manuell implementierts und keine socket library oder ähnliches benutzt, dann solltest du auf jeden fall select() oder poll() benutzen um auf Daten zu warten. Eine Schleife die von non-blocking fds liest (ohne select() oder poll()) resultiert nämlich in 100% CPU Last.

Markus.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

non-blocking fd calls warten nicht, bis Daten vorhanden sind,
sondern liefern möglicherweise auch 0 bytes zurück.

Genau darum ging es mir. Wenn Daten vorhanden sind, dann Funktion1 sonst Funktion2-grob gesagt.
Jetzt funktioniert das auch!
Danke