我有一个linux守护进程,它正在生成一些数据。该守护进程有时会更新该数据。为简单起见,我们假设只有一个字节。现在我希望其他进程可以访问该数据,最简单的方法(至少对我来说)这样做就是拥有某种文件介体。
问题是我想从多个进程(或没有)和守护进程异步读取数据以更新该文件的内容。
是否可以有一个文件,从一个进程打开以进行写入以及从一个或多个进程读取?是否有一些特殊的文件类型,是为此目的而制作的?
P.P。我正在阅读关于FIFO文件和设备驱动程序,但我不确定,应该使用它们。
答案 0 :(得分:0)
什么?您的要求没有充分说明。
首先,什么会阻止您的读者在更新数据时看到数据?
可能采用的是咨询文件锁定(支持共享和独占模式)。阅读关于flock的信息。
另一个标准解决方案是创建一个新文件,然后将其重命名为(2)旧文件。该操作是原子的。
设法打开旧文件的读者当然会读取您的旧数据,但是您没有提供任何同步,因此无论如何它本身都是有趣的。 (事实上即使使用锁也可能足够活泼。)读取进程打开+读取+每次想要获取新数据时关闭文件。
还可以使用hack来查找文件以查看inode上的链接计数。如果为0,则表示文件已删除且存在更新。如果小丑将旧文件硬链接,则会出现问题,因为这会使您错过更新。