在 C 中,追加到文件打开以供 Windows 控制台和 Linux 上的另一个程序读取

In C, append to file open for read by another program on Windows console and Linux

我在同一台机器上有两个不同的 C 程序 运行。第一个程序,称为 FileReader,打开一个文件进行读取,并保持打开状态。我希望另一个程序 FileAppender 定期使用 "a"(追加)模式打开文件,追加数据,然后关闭文件。

但我不希望 FileReader 在 FileAppender 需要附加数据时关闭文件。

我的问题:首先,这完全可以做到吗?如果可以,对于 Windows 控制台程序和 Linux 来说,它能否以一种可移植、可靠的方式来完成?我问 "reliable" 的原因是因为我担心在测试中它可能有效,但不一定可靠。

其次,如果可以做到这一点,在可移植性和可靠性方面,FileReader 程序如何知道是否已附加数据?一个想法是对 EOF 进行 fseek,但担心 FileAppender 仍在向文件写入数据的过程中的情况。

注释中描述的 Linux/UNIX -tail 命令不存在 windows,但是,即使没有该命令,也有几种方法可以做到这一点。这是我用过的,应该可以跨平台使用:

首先认识到您正在描述一个共享(文件系统)资源,同一时间只能被一个进程访问。这两个(或更多)应用程序需要某种信号量(信号)方法来通过检查另一个应用程序的存在来通知目标文件的当前状态。我为此使用了 Token 文件,它对我有用。 Token 文件只是一个具有唯一名称的文件,表明 permission 访问目标文件,其中目标文件是 被多个进程编辑的文件。进程(应用程序)可以检查此令牌文件是否存在。如果令牌存在,则目标文件正忙,不应访问。如果令牌不存在,则创建它,然后访问目标文件。完成附加到目标后关闭标记。

简单的概念流程:

Process 1
while(token exists)
{
   //Sleep(20)
}
create token
Open target file for append
write to target file
close target file
close token

Process 2
while(token exists)
{
   //Sleep(20)
}
create token
Open target file for append
write to target file
close target file
close token