linux - Linux上如何同步多个独立应用的文件I/O?
问题描述
我正在为 Linux 编写一个软件,它可以在后台主动处理用户的文件,同时与我无法控制的其他应用程序一起工作。我想让我的后台应用程序不覆盖其他应用程序所做的更改。但是有一个问题 - 与 Windows 不同,Linux 不提供强制文件锁定功能,这可能会由于我想避免的竞争条件而破坏用户的工作。
所以我想知道 - Linux 上是否有提供某种同步机制的文件系统,例如比较和交换操作、全有或全无事务、强制文件锁定(如在 Windows 中)?
解决方案
我相信有三种可能的解决方案
1) 使所有程序都使用实现所需功能的自定义文件 I/O 库。如果您无权访问源代码,此解决方案可能不可行。您也可以考虑使用 mmap 以便将更改写入内存。您使用后台进程将脏页同步到现有文件或新文件。
2) 替换受影响程序将使用的标准 C/C++ 库(例如 libc.so)。您可以ldd
用来找出库依赖关系。您需要更新标准 C/C++ 的源代码以实现您需要的功能。这对大多数人来说可能太难了。
3) 创建你的文件系统。你可以参考网上很多文章,比如https://kukuruku.co/post/writing-a-file-system-in-linux-kernel/。这是最好和最干净的解决方案。
希望能帮助到你。
推荐阅读
- mysql - 在 MySQLWorkbench、Mac OS Catalina 中看不到结果集
- python - pyaudio中的通道数是什么意思?
- apache-spark - 如何在平面地图期间保持映射数据分开
- java - composing tasks with null checks within a method
- android - 无法获取未知属性 'bundleReleaseAar' Maven 发布
- mongodb - 从具有字符串字段的子文档数组中修剪空格的字符串值
- javascript - How can I get .getAttribute and .removeAttribute to match a[onclick*='ga']
- c# - 使用一个 From Action 方法覆盖控制器上的 ResourceFilter
- solr - Match where multi valued field has only value queried
- javascript - 尝试使用 Javascript 在 Sharepoint 中读取文件的内容