c - 如何在 C 中与外部文本编辑器交互
问题描述
我正在 C(linux 环境)中开发一个命令行应用程序来编辑特定的文件格式。此文件格式是一个纯 XML 文件,该文件经过压缩、加密和加密签名。
我想为用户提供一个选项,让他们以一种简单的方式编辑这种文件,而无需手动提取文件、编辑文件、然后压缩、加密和签名。
理想情况下,当被调用时,我的应用程序应该执行以下操作:
- 打开加密/压缩文件并将其解压缩到临时位置(如
/tmp
) - 调用外部文本编辑器,如
nano
或sublime-text
或 ,gedit
具体取决于安装的版本以及用户偏好。等到用户编辑完文件并关闭文本编辑器。 - 读取修改后的临时文件并加密/压缩,替换旧的加密/压缩文件
我怎样才能达到没有。2?
我考虑过调用nano
并system()
等待它返回,或者inotify()
在临时文件上放置一个以了解图形文本编辑器何时修改它。
哪种解决方案更好?如何调用用户的默认文本编辑器?有什么可以以更好的方式完成的吗?
解决方案
首先,考虑不要自己编写一个实际的应用程序或包装器,它会调用另一个编辑器,而是为一些现有的编辑器编写某种插件,该插件足够灵活以支持其他格式并通过解压缩传递其输入。
当然,这不是唯一的解决方案,但对您来说可能更容易。
使用您的特定方法,您可以:
- 使用
EDITOR
和/或VISUAL
命令行变量(@KamilCuk 也指出)来确定要使用的编辑器。 - 将编辑器作为子进程运行,以便您知道它何时结束执行,而不必与它通信。收到文件更改的通知,甚至是打开或关闭文件的通知还不够好,因为编辑器可能会更改多个文件,有些编辑器甚至不会在您处理文件时保持文件打开。
- 记得处理编辑不上来的情况;或悬挂;或者您收到一些通知以停止等待编辑;等等