J'essaie de rediriger à la fois stdout
et stderr
vers un seul fichier avec un programme C.Rediriger à la fois stdout et stderr vers un seul fichier et conserver l'ordre des messages
Voici mon code:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int redirectOutputs();
int main()
{
redirectOutputs();
printf("OUT : test\n");
perror("ERR : test");
printf("OUT : test 2\n");
int t = 23;
printf("OUT : again\n");
perror("ERR : again");
}
int redirectOutputs()
{
int log = open("err.log", O_RDWR|O_CREAT|O_APPEND, 0600);
if (log == -1)
{
perror("opening err.log");
return -1;
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
dup2(log, STDOUT_FILENO);
dup2(log, STDERR_FILENO);
close(log);
}
Et le fichier de sortie:
ERR : test: Success
ERR : again: Success
OUT : test
OUT : test 2
OUT : again
Ils sont tous deux redirigés bien, mais il semble que le tout stderr
est écrit, puis le tout stdout
. Je voudrais garder l'ordre des messages dans le fichier. je devrais avoir le fichier suivant:
OUT : test
ERR : test: Success
OUT : test 2
OUT : again
ERR : again: Success
Savez-vous quel est le problème dans mon code?
Votre sortie est-elle tamponnée? Essayez d'appeler 'fflush()' –