繁体   English   中英

在Linux上将文件用作IPC

[英]using files as IPC on linux

我有一个作家,他创建并有时使用一些状态信息更新文件。 读者是用lua实现的(所以我只有io.open ),还有可能是bash( catgrep等等)。 我担心如果在读者对文件有开放句柄的情况下更新状态信息(这意味着对文件进行完整的重写)会发生什么情况? 我还读到 ,如果写/读操作小于4KB,那是原子的:对我来说这是完全可以的,因为状态信息可以很好地适应这样的维度。 我可以做这个假设吗?

读或写是原子的,仅对管道小于4 KB,而对磁盘文件而言则不是(原子粒度可能是文件系统块大小,通常为512字节)。

在实践中,您可以避免麻烦此类问题(例如,假设您的状态文件小于512字节),而且我相信,如果编写者正在打开并快速写入该文件(尤其是避免使用open(2)),文件并保持打开的文件句柄很长时间-几秒钟-然后在以后写入(2)-一次-在其中放一个小字符串-),您无需费心。

如果您偏执狂,但确实假设读者(如grep )正在打开文件并快速读取它,则可以写入一个临时文件,并在写入(和close(2) -ed)时对其进行重命名(2)-对其进行编辑。整体。

正如Duck所建议的 ,将文件锁定在读取器和写入器中也是一种解决方案。

我可能会弄错,在这种情况下,有人会纠正我,但我认为外部读者不会对文件是否同时更新感到关注。 他们将打印(或可能出现错误或错误)任何内容。

无论如何,为什么不避免整个混乱,仅使用文件锁即可。 让写手flock (或类似),而读者则检查锁。 如果他们获得了锁,他们就知道可以阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM