c - 如何在 C 中与外部文本编辑器交互

标签 c linux command-line text-editor

我正在用 C(linux 环境)开发一个命令行应用程序来编辑特定的文件格式。这种文件格式是一种纯 XML 文件,先进行压缩,然后加密,然后进行加密签名。

我想为用户提供一个选项,让他们可以轻松地编辑此类文件,而无需手动解压文件、编辑文件,然后压缩、加密和签名。

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

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

我怎样才能达到第 1 点? 2?

我想用 system() 调用 nano 并等待它返回,或者在临时文件上放置一个 inotify()知道它何时被图形文本编辑器修改。

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

最佳答案

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

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

通过您的特定方法,您可以:

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

关于c - 如何在 C 中与外部文本编辑器交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56274313/

相关文章:

CMake:定义自定义包含路径

c - 我想在 c 中实现一个结构。在 FOR LOOP 部分,没有通过 scanf 获取 P[0].processname 它继续下一部分

c - 读取进程在写入进程之前终止时的 Unix/Linux 管道行为

linux - 在 Linux 中从 .txt 文件重定向到可执行文件

linux - 在 Lion 终端中的远程 Linux 机器上打开 vi 时遇到问题

c - 为什么 scanf 将值传递给我的函数,不希望 scanf 将值发送给被调用者

ruby-on-rails - SSH 和 -bash : fork: Cannot allocate memory Ubuntu , rails、Passenger、redis、sidekiq

Linux查找没有文件的文件夹,但只查找子文件夹

linux - 如何从 Linux 命令行确定 LCD 显示器是否打开

amazon-s3 - AWS S3 CLI 使用新名称移动文件