是否可以同时在两个不同的程序中写入(或首先打开)磁盘文件?

时间:2013-10-15 11:10:55

标签: c file-io

我需要根据两个可能同时运行的不同模块生成的消息更新日志文件。

那么可以在两个程序中同时打开和写入文件吗?

Sys Spec:SLES 11 x86_64。

2 个答案:

答案 0 :(得分:3)

是。一个文件可以由几个进程/程序同时打开。多个流程/程序可以读取&同时写入文件,但同时在同一文件中写入的最终结果可能是undefined。所以最好使用 locks

在Linux上,您可以使用: flocks

答案 1 :(得分:3)

您可以执行以下操作之一:

  • 使用flock()(或类似机制)同步打开的文件描述符上的写入(已经回答)。
  • 在支持(甚至强制执行)独占open()的系统上反复使用close()open()(或类似)。
  • 依赖缓冲输出来不间断地发送日志行。这通常与 stderr 日志一起使用,因为可能的竞争条件通常不是问题。
  • 使用日志服务,只有open()文件。其他进程通过IPC与日志服务进行通信。您可以使用自定义日志记录服务或syslogjournald等工具。他们俩AFAIK也支持从非root进程进行日志记录。

我个人更喜欢最后一个选项,因为它的设计是最干净的,并且它不太依赖于特定于操作系统的行为。如果您的应用程序包含由主进程启动的多个进程,那么主进程也可以作为日志记录服务执行,并在生成子进程之前创建管道。如果进程是单独启动的,则可以使用单独的服务侦听TCP / IP套接字或(如果系统支持)本地域套接字。