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 packetdaten

    char* 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!


Anmelden zum Antworten