3
在程序中,我希望所有的printfs被寫入syslog。我將所有printf替換爲syslog,因此我想將stdout和stderr重定向到syslog。對於我嘗試下面的代碼將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 stdout\n");
fprintf(stderr,"Wriiten in stderr\n");
pclose(fl);
}
問題是標準錯誤去syslog並沒有打印在屏幕上的程序被掛起。 請建議。
您僅限於C或你會願意在一個解決方案中使用C++? – Crog
您需要在'pclose()' – Petesh
...之前關閉'stdout'和'stderr' ...理由:'stderr'可以工作,因爲它沒有緩衝。 'stdout'被緩衝並關閉它來刷新緩衝區。 –