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

标签 c linux file-io

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

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

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

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

最佳答案

Windows 不存在注释中描述的 Linux/UNIX -tail 命令,但是,即使没有该命令,也有多种方法可以执行此操作。这是我用过的,应该可以跨平台工作:

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

简单的概念流程:

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

关于c - 在 C 中,追加到打开的文件以供 Windows 控制台和 Linux 上的另一个程序读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30627991/

相关文章:

android - 自定义 ContentProvider - openInputStream()、openOutputStream()

python - 过滤超大文件夹中的文件

c++ - 在只知道 FILE * 的 C++ 中清除文件内容

c - linux中ioctl函数集的目的是什么?

c - 让函数仅使用宏调用

linux - rpmbuild 失败并显示 "files must begin with/"消息

linux - 为什么 linux 内核中的这段代码不会导致死循环?

c# - 在 C# 中创建自定义文件属性

C编程: String calculation Using ASCII code

c - 从指向字节的指针数组中获取特定字节数组的大小