Stefan Hundhammer schrieb:
On Wednesday 24 March 2004 16:39, Stefan Weßels wrote:
Ich möchte einem Programm einen String in der Form ' echo bla | programm' übergeben. Das klappt auch ganz gut mit
--schnipp--- fgets(buffer,sizeof(buffer),stdin); --schnipp---
Wenn ich das Programm aber normal aufrufe, wird auf eine Eingabe gewartet. Wie kann ich das waten auf eine Eingabe verhindern, wenn nichts per pipe übergeben wird ?
Du mußt den File-Deskriptor auf NONBLOCK stellen - siehe "man fcntl" oder (ausführlicher) hier:
http://www.gnu.org/software/libc/manual/html_node/Getting-File-Status-Flags.... http://www.tnt.uni-hannover.de/soft/case/lang/c/libc/libc_13.html
Dann solltest Du aber auch mit low-level read() lesen und nicht mit fgets(), denn fgets() wird wahrscheinlich (?) schön brav immer wieder read() neu aufsetzen, bis Newline oder EOF kommt - und gerade das willst Du ja nicht.
Du mußt auch aufpassen, daß Du damit kein "busy wait" programmierst, wenn Du ggf. read() immer wieder in einer Schleife aufrufst - read() kehrt dann nämlich einfach sofort zurück, wenn nichts zum Lesen da ist.
CU
Danke für den Tip, funktioniert zumindest in meinem Anwendungsfall auch
mit fgets().
--
mfg
Stefan Weßels
Braseweg 11
31535 Neustadt
mailto: