【发布时间】:2018-04-16 15:24:06
【问题描述】:
我有一组用 C 语言编写的独立程序。我希望他们都将他们的日志写入同一个文件。显然是控制访问的问题。他们中的两个或更多最终可能会同时写入。
实现这一目标最务实的方法是什么?
我遇到了使用 pthread/mutexes/etc 的解决方案,但这样的实现听起来有点矫枉过正。
我也在查看系统日志,但想知道这是否真的是为了我需要做的事情?
我觉得我需要一个守护程序服务来接收消息并在写入时进行控制。我想知道它是否已经存在。
【问题讨论】:
-
“我觉得我需要一个守护程序服务来接收消息并在写入时进行控制。我想知道这是否已经存在。”是的,那是系统日志。
-
这有点宽泛...请指定其他约束,最好提供一些示例代码。
syslog是一种选择,但它基本上需要 root 访问权限才能配置日志记录。 -
如果您以
O_APPEND模式打开日志文件,并使用单个write()调用编写每条消息,我想您一定会得到您想要的。 -
我对史蒂夫的评论很感兴趣,因为这在短期内可能是一个不错的选择。使用 O_APPEND 模式如果一个人在另一个人已经在写的时候尝试写会发生什么。这会阻止第二个的写作过程吗?我会以这种方式进行挖掘和测试。这是在openwrt上运行的。 syslog 在那里被称为 logd/logread 但我应该能够处理它。
-
@Noel 因为我们在这里讨论的是系统调用,所以问“如果一个人试图写而另一个人已经在写会发生什么”几乎没有任何意义。如果操作系统内核是单线程的,那么单个系统调用本质上是原子的。而
O_APPEND的定义是,它将每个write()调用都变成了一个原子的seek-to-end-then-write 操作。我不确定在多处理器或其他多线程操作系统上会发生什么,但我很确定操作系统内核会为您处理任何独占锁定。