【问题标题】:C - Shared library with management of the same fileC - 管理同一文件的共享库
【发布时间】:2022-01-17 00:32:54
【问题描述】:

我想用 C for linux 创建共享库,一些数据库管理的抽象实现。共享库负责读取包含数据库的文件并将差异写入其中。但我不知道如何处理这种情况下的文件处理的多处理问题,例如:App1 尝试将差异写入数据库文件,而 App2 目前已打开带有数据库的文件以读取它。在本例中,我想通知 app1 文件当前已打开并延迟写入序列,直到 App2 完成数据库文件读取。

我正在考虑使用一些互斥机制或使用全局枚举变量来管理当前文件状态,但在阅读了一些帖子后,我了解到每个使用共享库的应用程序都会在内存中创建自己的副本,但它们不会t 在工作期间共享任何内存部分。

【问题讨论】:

  • 也许您在寻找client-xerver model,而不是共享库?否则请查看File locking mechanism
  • 根据操作系统,您的库可能能够包含一个可以保存一个或多个变量的共享内存部分。
  • 谢谢,我会研究这些主题(主要是共享内存部分),并可能尝试给出一些答案来更新/完成我的问题

标签: c linux shared-libraries


【解决方案1】:

共享库负责读取包含数据库的文件并将差异写入其中。

这是可能的,但要退出复杂的解决方案。

虽然您需要确保多个进程不会相互干扰。可以使用文件日志(参见man flock)和man fcntl 中的记录锁定来执行此操作,但您必须确保多个进程“就地”更新不相交的文件块(无需调整文件大小)。

这也容易出现死锁——如果其中一个进程锁定一个区域然后进入无限循环,其他进程也可能会卡住。

一个更简单的解决方案涉及客户端-服务器,其中服务器实现所有写入,客户端向其发送读取和修改请求。

附:现有的库实现了这两种方法。使用现有解决方案,您可能会节省几个月的开发时间。

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多