首页 > 解决方案 > 如何在 C 中与外部文本编辑器交互

问题描述

我正在 C(linux 环境)中开发一个命令行应用程序来编辑特定的文件格式。此文件格式是一个纯 XML 文件,该文件经过压缩、加密和加密签名。

我想为用户提供一个选项,让他们以一种简单的方式编辑这种文件,而无需手动提取文件、编辑文件、然后压缩、加密和签名。

理想情况下,当被调用时,我的应用程序应该执行以下操作:

  1. 打开加密/压缩文件并将其解压缩到临时位置(如/tmp
  2. 调用外部文本编辑器,如nanosublime-text或 ,gedit具体取决于安装的版本以及用户偏好。等到用户编辑完文件并关闭文本编辑器。
  3. 读取修改后的临时文件并加密/压缩,替换旧的加密/压缩文件

我怎样才能达到没有。2?

我考虑过调用nanosystem()等待它返回,或者inotify()在临时文件上放置一个以了解图形文本编辑器何时修改它。

哪种解决方案更好?如何调用用户的默认文本编辑器?有什么可以以更好的方式完成的吗?

标签: clinuxcommand-linetext-editor

解决方案


首先,考虑不要自己编写一个实际的应用程序或包装器,它会调用另一个编辑器,而是为一些现有的编辑器编写某种插件,该插件足够灵活以支持其他格式并通过解压缩传递其输入。

当然,这不是唯一的解决方案,但对您来说可能更容易。

使用您的特定方法,您可以:

  • 使用EDITOR和/或VISUAL命令行变量(@KamilCuk 也指出)来确定要使用的编辑器。
  • 将编辑器作为子进程运行,以便您知道它何时结束执行,而不必与它通信。收到文件更改的通知,甚至是打开或关闭文件的通知还不够好,因为编辑器可能会更改多个文件,有些编辑器甚至不会在您处理文件时保持文件打开。
  • 记得处理编辑不上来的情况;或悬挂;或者您收到一些通知以停止等待编辑;等等

推荐阅读