gpt4 book ai didi

c - 如何将子进程的输出重定向到系统日志?

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:39 25 4
gpt4 key购买 nike

我在 freebsd 下用 C 开发。我正在使用 cron 作业调用程序 A,该程序使用 fork()/exec() 调用另一个程序 B。在 A 中,我使用 syslog() 将日志写入/var/log/messages,但 B 输出到标准输出所以 B 的输出没有写入/var/log/messages。

如何在不修改 B 的代码的情况下将 B 的输出重定向到系统日志?我想应该有某种机制可以将 B 的输出重定向到 A 中的某个 fd,但由于我使用的是 syslog() 而不是直接在 A 中打开文件,所以我不确定这将如何工作。

感谢您的建议!

最佳答案

我不记得 freebsd 是否包含记录器程序。如果是这样,您的程序 A 可能能够将 B 作为某种形式的“B | 记录器”调用。例如,而不是

execl("/my/path/to/B", "B", NULL);

利用外壳:

execl("/bin/sh", "sh", "-c", "/my/path/to/B | logger", NULL);

logger 程序有其他选项可以将其消息定向到特定的 syslog 设施,这可能需要匹配您的应用程序的行为。

缺少 logger,您可能需要进行传统的 Posix 管道装配:使用 pipe(2) 创建管道,将管道的输出端复制到 B 的stdout,并读取(在 A 中或在单独的子进程中)管道的输入端,以便将消息发送到 syslog(3)

关于c - 如何将子进程的输出重定向到系统日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22394819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com