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