我需要根据两个可能同时运行的不同模块生成的消息更新日志文件。
那么可以在两个程序中同时打开和写入文件吗?
Sys Spec:SLES 11 x86_64。
答案 0 :(得分:3)
是。一个文件可以由几个进程/程序同时打开。多个流程/程序可以读取&同时写入文件,但同时在同一文件中写入的最终结果可能是undefined
。所以最好使用 locks 。
在Linux上,您可以使用: flocks
答案 1 :(得分:3)
您可以执行以下操作之一:
flock()
(或类似机制)同步打开的文件描述符上的写入(已经回答)。open()
的系统上反复使用close()
和open()
(或类似)。open()
文件。其他进程通过IPC与日志服务进行通信。您可以使用自定义日志记录服务或syslog
或journald
等工具。他们俩AFAIK也支持从非root进程进行日志记录。我个人更喜欢最后一个选项,因为它的设计是最干净的,并且它不太依赖于特定于操作系统的行为。如果您的应用程序包含由主进程启动的多个进程,那么主进程也可以作为日志记录服务执行,并在生成子进程之前创建管道。如果进程是单独启动的,则可以使用单独的服务侦听TCP / IP套接字或(如果系统支持)本地域套接字。