Probleme mit dup2, stdout und stderr

Wenn dieses Programm ausgeführt wird, das "stderr" Zeile angezeigt wird, bevor die "stdout" - Linie. Warum? Ich dachte, dup2 machen würde, stderr und stdout verwenden Sie die gleiche Datei-Deskriptor, so sollte es kein problem mit der Pufferung. Ich bin mit gcc 3.4.6 auf Solaris 10.

#include <errno.h>
#include <stdio.h>
#include <unistd.h>

int main()
{
    int fd[2];
    int pid;
    char buf[256];
    int n;

    if(pipe(fd) < 0) {
        perror("pipe");
        return 1;
    }
    if((pid = fork()) < 0) {
        perror("fork");
        return 1;
    }
    else if(pid > 0) { //parent
        close(fd[1]);
        if((n = read(fd[0], buf, sizeof(buf))) > 0) {
            buf[n] = 0;
            printf("%s", buf);
        }
    }
    else {
        dup2(fd[1], fileno(stdout));
        dup2(fd[1], fileno(stderr));
        close(fd[1]);
        fprintf(stdout,"stdout\n");
        fprintf(stderr,"stderr\n");
    }
    return 0;
}

InformationsquelleAutor Doug Masterson | 2010-10-19

Schreibe einen Kommentar