printf >(>) datei funktioniert nicht
-
Hallo!
Ich habe eine consolenanwendung für root in c++ die mit Hilfe von printf verschiedene Daten ausgibt. Die kann man - natürlich - auch in der Console sehen. Wenn ich jetzt aber z.B.# ./test > test.log
eingebe bleibt die Datei leer. Auch
# ./test | grep XXXXX
funktioniert überhaupt nicht. Es gibt keine Ausgabe.
Woran liegt das? Wie kann ich die ausgegebenen Dateien auch in eine Datei umleiten?
-
# cat > test.c #include <stdio.h> int main() { printf("Hello World\n"); } # gcc test.c -o test # ./test Hello World # ./test > out # cat out Hello World
Mach mal.
-
vielleicht gibt test auf stderr aus. Dann musst du
./test 2> test.log
benutzen.
-
Danke für die schnellen Antworten!
# cat > test.c #include <stdio.h> int main() { printf("Hello World\n"); } # gcc test.c -o test # ./test Hello World # ./test > out # cat out Hello World
funktioniert bei mir auch genauso...
./test 2> test.log
führt dazu, dass die Ausgabe in der console trotzdem stattfindet aber test.log trotzdem leer ist. Anscheinend wird es auch nicht auf stderr ausgegeben...
Vielleicht noch ein paar generelle Sachen, die vielleicht eine Rolle spielen:
Ich schreibe ein netzwerkanalysetool und es gibt keinerlei warnings oder errors.
Ich bin root. Ich setze von -o abgesehen bei g++ keine weiteren Parameter ein. Ich verwende printf quasi immer mit pointern auf packetdatenchar* sender_UIN; [...] printf("%s\n",sender_UIN);
aber ich hab auch schon mal ein unspektakuläres printf("test"); versucht. Ohne erfolg...
includes
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #include <netdb.h>
-
Lass mich raten: Dein Programm beendet sich nicht direkt nach der Ausgabe, sondern wartet auf irgendwas, während Du verzweifelt darauf wartest, dass die Datei wächst?
Vermutlich merkt die Standardbibliothek, wenn nicht auf ein Terminal ausgegeben wird, und puffert dann anders. Wenn Du an die Stellen, wo Du sicherstellen möchtest, dass die Ausgabe geschrieben wird (z.B. nach jedem \n), ein fflush(stdout) setzt, sollte es klappen.
-
Spitze! Läuft jetzt ausgezeichnet!
Vielen Dank an alle!