重定向标准输出stderr到syslog

时间:2013-01-24 15:37:49

标签: c linux

在程序中,我希望将所有printfs写入syslog。我将所有printf替换为syslog,所以我想把stdout和stderr重定向到syslog。为此,我尝试了以下代码

int main()
{
    FILE *fl;
    fl = popen("logger","w");
    if(fl == NULL)
        return 1;
    fprintf(fl,"logger test new");//this goes to /var/log/messages
    int nf;
    nf = fileno(fl);
    dup2(nf,STDOUT_FILENO);
    dup2(nf,STDERR_FILENO);
    fprintf(stdout,"Wriiten in stdout\n");
    fprintf(stderr,"Wriiten in stderr\n");
    pclose(fl);
}

问题是stderr转到syslog并且屏幕上没有打印任何内容并且程序挂起。 请建议。

2 个答案:

答案 0 :(得分:4)

dup2(nf,STDOUT_FILENO);
dup2(nf,STDERR_FILENO);
fprintf(stdout,"Wriiten in stdout\n");
fprintf(stderr,"Wriiten in stderr\n");
fflush(stdout);

这应该解决它。

fflush()将强制从stdout写入缓冲数据。

答案 1 :(得分:2)

fflush(stdout)的替代方法可能是使用以下方法禁用stdout缓冲:

setbuf (stdout,NULL);