首页 > 解决方案 > Linux上如何同步多个独立应用的文件I/O?

问题描述

我正在为 Linux 编写一个软件,它可以在后台主动处理用户的文件,同时与我无法控制的其他应用程序一起工作。我想让我的后台应用程序不覆盖其他应用程序所做的更改。但是有一个问题 - 与 Windows 不同,Linux 不提供强制文件锁定功能,这可能会由于我想避免的竞争条件而破坏用户的工作。

所以我想知道 - Linux 上是否有提供某种同步机制的文件系统,例如比较和交换操作、全有或全无事务、强制文件锁定(如在 Windows 中)?

标签: linuxconcurrencyiotransactionsfilesystems

解决方案


我相信有三种可能的解决方案

1) 使所有程序都使用实现所需功能的自定义文件 I/O 库。如果您无权访问源代码,此解决方案可能不可行。您也可以考虑使用 mmap 以便将更改写入内存。您使用后台进程将脏页同步到现有文件或新文件。

2) 替换受影响程序将使用的标准 C/C++ 库(例如 libc.so)。您可以ldd用来找出库依赖关系。您需要更新标准 C/C++ 的源代码以实现您需要的功能。这对大多数人来说可能太难了。

3) 创建你的文件系统。你可以参考网上很多文章,比如https://kukuruku.co/post/writing-a-file-system-in-linux-kernel/。这是最好和最干净的解决方案。

希望能帮助到你。


推荐阅读