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
--
Stefan Hundhammer