function system() --- perl vs. c
-
ruft man system() aus einem perl script mit einem ungüligen parameter auf gibts es ein -1 als return und das wars - nix error-meldung.
macht man dasselbe in c - zb. system("foo") - gibts eine error meldung, die von einer sh stammt wie folgt :
sh: line 1: foo: command not found
frage: wieso der unterschied und wie kann ich die fehlermeldung in einem c-programm unterdrücken ?
-
Weiss jetzt nicht, obs nen dreckiger Trick ist, aber das geht:
system("foo 2> /dev/null");
Allerdings wird jegliche Fehlermeldung unterdrückt, d. h. sowohl wenn das Kommando nicht gefunden wurde also auch wenn evtl. benötigte Parameter fehlen ("foo" und "cp" würden beide fehlschlagen, aber aus einem anderen Grund).
-
CarstenJ schrieb:
Weiss jetzt nicht, obs nen dreckiger Trick ist, aber das geht:
system("foo 2> /dev/null");
Allerdings wird jegliche Fehlermeldung unterdrückt, d. h. sowohl wenn das Kommando nicht gefunden wurde also auch wenn evtl. benötigte Parameter fehlen ("foo" und "cp" würden beide fehlschlagen, aber aus einem anderen Grund).
naja, das unterdrückt ja nicht nur fehlermeldungen, sondern sämtliche ausgaben.
-
Was nicht stimmt....wenn es den Befehl gibt und der irgendwelche Ausgaben macht, dann erscheinen die auch. Nimm doch einfach mal "ls" als Kommando.
"2>" leitet alle Fehlerausgaben nach /dev/null, alles andere wird nach STDOUT geschickt.
-
Nicht ganz, das 2> leitet nur stderr um.
Aber wenn du mehr Kontrolle willst, solltest du eine exec-Funktion nehmen.
-
Tag,
Ich würd mal sagen der beschriebene Code ist "dreckig", aber er funktioniert.
Das ist doch fast das wichtigste.
Der Grund warum es in C- so abläuft ist (jedenfalls bei den meisten unixen) dass der system-call intern execl benutzt und das commando and eine Schell schickt. Deswegen die Meldung.
-