gpt4 book ai didi

c - 如何在 Linux 上使用标准 I/O 函数在多个进程中写入一个文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:08 28 4
gpt4 key购买 nike

我正在研究一项需要在多个进程中写入单个日志文件(由其路径标识)的功能。以前,每个进程都用于调用 printf 以流式传输终端上的日志(标准输出)。现在我需要将输出目标更改为文件。所以我尝试使用 freopen 将标准输出重定向到每个进程中的文件。

freopen(file_path, "a", stdout); //

但是好像效果不是很好。一些日志丢失。实现这一目标的常见做法是什么?

B.T.W 在我们的要求中,应该允许用户在文件和标准输出之间切换日志记录目的地,因此当切换回终端时,第一个参数“file_path”可以是 tty。可以调用 freopen(tty, "a", stdout) 吗?

最佳答案

你有很多选择:

1) 最简单的方法是让每个进程独立地写入同一个日志。当然,问题是如果任何两个进程同时写入不同的消息,文件就会被打乱。

2) 您可以改为让进程将消息发送到一个“主记录器”,然后它会按照收到的顺序一次输出一条消息。 “主记录器”可能使用套接字。如果所有进程都在同一台主机上,您可以改用消息队列或命名管道。

3) 更简单的是,您可以使用系统范围的信号量来确保一次只写入一条消息。

4) 另一种方法可能是使用开源记录器,例如 log4jsyslog-ng

关于c - 如何在 Linux 上使用标准 I/O 函数在多个进程中写入一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018943/

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