C 是否可以将peror()生成的消息发送到/var/log/syslog?

C 是否可以将peror()生成的消息发送到/var/log/syslog?,c,error-handling,daemon,syslog,errno,C,Error Handling,Daemon,Syslog,Errno,我使用perror()打印错误消息,如: pid = fork(); if (pid < 0) { perror("couldn't fork"); exit(EXIT_FAILURE); } pid=fork(); if(pid&1 | logger假设您拥有写入syslog的正确权限,我不明白您为什么不能将输出传输到该文件。您还可以使用fprintf和stderr将错误结果输出到您创建的文件中。使用strerror根据错误代码获取错误消息,而不打印它。然后将其传递给s

我使用perror()打印错误消息,如:

pid = fork();
if (pid < 0) {
    perror("couldn't fork");
    exit(EXIT_FAILURE);
}
pid=fork();
if(pid<0){
佩罗(“不会叉子”);
退出(退出失败);
}
是否可以使用
errno/perror()
工具,但将生成的消息直接发送到系统日志(
/var/log/syslog


我在一个程序的上下文中问这个问题,这个程序可以在守护进程和非守护进程模式下运行。在守护进程模式下,
perror()
消息不会出现在系统日志上。

最简单的方法是在调用程序时重定向stderr(可能还有stdout)。例如:
/myprog 2>&1 | logger

假设您拥有写入syslog的正确权限,我不明白您为什么不能将输出传输到该文件。您还可以使用fprintf和stderr将错误结果输出到您创建的文件中。

使用
strerror
根据错误代码获取错误消息,而不打印它。然后将其传递给
syslog
,就像任何其他日志消息一样:

syslog(LOG_ERR, "Couldn't fork: %s", strerror(errno));

谢谢,但我希望这是正确的方法,即使用特定于守护进程(fork等)和
syslog()
。在绝大多数情况下,使用重定向(例如在shell脚本或cron条目中)是“正确的方法”。如果要以编程方式记录,请参阅“”。如果要重定向(stderr,文件#2),则使用dup2:。如果希望错误文本独立于调用peror(),那么.我使用的是
syslog()
。我想做的是将
syslog()
errno/perror()
结合。然后听起来strerror()可能就是你的人:)要求是我想使用
errno
perror()
功能<当系统调用失败时,code>errno被设置为适当的错误号,并且
peror()
打印相关的错误消息。除非他以root用户身份运行,否则他没有直接写入syslog的权限。所有内容都应通过
syslog()
函数发送。请在代码的前面检查当前模式。然后编写一个小函数,以字符串作为参数,根据当前模式调用perror()或syslog(),如程序前面所述