C - 将 stdout & stderr 重定向到 syslog



在一个程序中,我希望所有的printfs都写入syslog。我将所有 printf 替换为系统日志,因此我想将 stdout 和 stderr 重定向到系统日志。为此,我尝试了以下代码

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 stdoutn");
    fprintf(stderr,"Wriiten in stderrn");
    pclose(fl);
}

问题是stderr转到系统日志,屏幕上没有打印任何内容,程序被挂起。请指教。

dup2(nf,STDOUT_FILENO);
dup2(nf,STDERR_FILENO);
fprintf(stdout,"Wriiten in stdoutn");
fprintf(stderr,"Wriiten in stderrn");
fflush(stdout);

这应该可以解决它。

fflush()将强制从标准输出写入缓冲数据。

fflush(stdout)的替代方法是使用以下方法禁用标准输出缓冲:

setbuf (stdout,NULL);

最新更新