0

我写了一个C程序,程序中有很多 printf() 将日志信息输出到标准输出。现在我想使用多个进程以不同的参数同时运行程序。我想将输出从 stdout 重定向到使用>. 但是多个进程同时运行,它们的日志信息输出相互重叠,这对于以后的分析可能会造成混淆。

一种解决方法是:考虑到不同的进程会在不同的时间退出,修改C程序,将每条日志信息临时写入一个临时文件。当 C 程序即将退出时。从临时文件中读取并将内容写入标准输出,这需要大量修改。

我的想法是:我希望在 C 程序中,所有 printf() 输出都可以被缓冲,只有在进程退出时才将输出放入 stdout/redirection。

有可能吗?谢谢!

4

1 回答 1

0

这实际上是不可能的,除非您确定输出是合理有界的(例如总输出小于几兆字节),否则使用发送到某个中央记录器的日志记录机制(如syslog)。

在 Linux 和大多数 Posix 系统上,进行日志记录的最简单方法是使用为日志记录而设计的syslog(3)(并且能够处理不同的进程)。我认为这是更可取的方法。

使用 GNU libc,您可以考虑使用open_memstream(3) - 写入内存,在这里您需要确保总输出是有界的 - 并使用atexit(3)在程序退出时将内存流写入一些文件;您可能想使用一些锁定机制,例如flock(2)等...

正如J.Holetzeck评论的那样,最简单的方法是将输出重定向到不同的文件中(可能使用freopen(3),或者只是在调用 shell 中),然后合并这些文件。

我猜你使用 Linux 或一些 Posix 系统。对于Windows,我不知道。

于 2013-05-11T15:27:05.953 回答