如何修改当前正在运行的应用程序的应用程序文件(在Linux上)?

时间:2010-06-07 06:37:08

标签: c++ c linux locking io

我有一个名为AppFS的应用程序。这个应用程序有一个ext2文件系统只附加到文件的末尾(它的位置使得应用程序二进制文件存在于1MB的间隔区域,然后是ext2数据)。

现在我已经在程序中嵌入了FUSE,并且我已经设法将文件系统从应用程序数据中提取到一个临时文件中,以便FUSE可以挂载/使用它。

我现在遇到的问题是将临时文件写回应用程序文件中。我得到“文本文件繁忙”可能是因为应用程序已锁定自身并且不会让写入发生。

有没有办法可以强制文件解锁,以便我可以写入数据? (重要的是要注意我没有更改应用程序二进制区域 - 只是重写ext2组件。)它需要在不需要root权限的情况下解锁(由启动应用程序的同一用户解锁)。

2 个答案:

答案 0 :(得分:1)

这个问题的解决方案是重命名现有的应用程序名称(到临时目录中的某个位置),然后将新的(生成的)文件移回到它的位置并应用与旧的相同的umask / uid / gid一个人。一旦移动,您可以安全地取消正在运行的可执行文件的链接。

这是一个hacky解决方法(我特别不喜欢应用程序被完全删除和替换的事实),但它可以工作。

答案 1 :(得分:0)

我会做什么:

  1. 启动AppFS
  2. 可执行部分提取到文件中(不带FS)
  3. 运行提取的可执行文件,将原始可执行文件(附带FS)作为参数提供
  4. 提取的程序修改原始可执行文件(没问题 - 可执行文件不再运行)
  5. 退出时自行删除提取的程序
  6. 您需要做什么:

    1. 修改AppFS应用程序,使其执行上一次枚举中的步骤2,3,4和5.
    2. 我没有看到任何其他方式这样做。这种架构类似于SFX的架构。