STDOUT und STDERR vereinigen



  • Hi Leute,

    ich brauche eure Hilfe bei folgendem Problem: ich muss die beiden Ausgabeströme (Standardausgabe und Standardfehlerausgabe) irgendwie vereinigen (so, wie das bei Java's ProcessBuilder Klasse geht http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ProcessBuilder.html#redirectErrorStream(boolean)). Hab ich das jetzt verständlich erklärt?
    Also ich möchte aus STDOUT_FILENO lesen, falls es dort etwas zu lesen gibt und aus STDERR_FILENO, falls dort etwas zu lesen ist. Ich weiß nicht, ob es dafür eventuell eine Funktion in C gibt, um das zu gewährleisten, oder wie ich das schaffen soll. Bin für alle Tipps dankbar!

    LG,
    Chrissi



  • das musst du getrennt behandeln.



  • Chrissi17 schrieb:

    [...] Hab ich das jetzt verständlich erklärt?

    Nein. 😞
    Wieso willst Du aus STDOUT lesen??? 😕
    STDOUT und STDERR sind Pipes zum Schreiben!

    Wenn Du die beiden Ausgabekanäle eines Programms in der Shell "vereinen" möchtest, geht das mit ">&":

    > ls . gibts_nicht >& ls.log
    > cat ls.log
    ls: gibts_nicht: No such file or directory
    .:
    bin
    doc
    src
    > _
    

    Willst Du in einem eigenen C-Programm alle Ausgaben von STDERR nach STDOUT umleiten, so geht das mit dup2:

    # include <stdio.h>
    # include <unistd.h>
    
    int main()
     {
      dup2(1, 2);
      fprintf(stderr, "Das geht an STDERR.\n");
      printf("Das geht an STDOUT.\n");
      return(0);
     }
    

    Beide Ausgaben landen bei diesem Beispiel in dem Standard-Ausgabekanal STDOUT.



  • ist ganz einfach

    stderr zumachen und dann stdout auf stderr duplizieren


Anmelden zum Antworten