我試圖使用C程序將stdout
和stderr
重定向到單個文件。將stdout和stderr都重定向到單個文件並保留消息順序
這裏是我的代碼:
#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);
}
和輸出文件:
ERR : test: Success
ERR : again: Success
OUT : test
OUT : test 2
OUT : again
他們都重定向很好,但似乎所有stderr
寫,然後所有stdout
。 我想保留文件中的消息順序。 我應該有以下文件:
OUT : test
ERR : test: Success
OUT : test 2
OUT : again
ERR : again: Success
你知道什麼是我的代碼的問題?
您的輸出是否被緩衝?嘗試調用'fflush()' –