0

我正在创建一个简单的日志记录程序。当用户进入log some_file控制台时,程序当前只是简单地接收来自 的一些基本输入cin,并将其记录到some_file.

但是,我不想使用 实现我自己的编辑器cin,而是想打开 Nano 编辑器并让用户在那里编辑他的消息。

然后,当消息完成时,我希望我的 C++ 记录器将其作为字符串接收并继续。

这正是 git 在提交时所做的。

我怎样才能做到这一点?

(最好不使用expect等工具,只使用原始C++代码。)

4

3 回答 3

3

大多数编辑器都希望使用普通文件,因此您通常会创建一个临时文件,然后在其命令行上将该文件的名称传递给编辑器。当编辑器返回时,您将临时文件中的内容复制到您的日志中,然后销毁该文件。

于 2013-01-08T15:11:29.890 回答
1

如果要使用 Nano 编辑器,则需要运行 system() 函数以使用临时文件调用 Nano。然后稍后删除文件..

std::string filename = "/tmp/.out." + std::to_string(getpid());
std::string cmd = "/bin/nano " + filename
system(cmd.c_str());
// read from filename
unlink(filename.c_str());

更新

如果按照 DevSolar 的建议使用 tmpnam()

char filename[L_tmpnam];
tmpnam(filename);
std::string cmd  = "/bin/nano " + filename
system(cmd.c_str());
unlink(filename);
于 2013-01-08T15:17:18.360 回答
0

打开一个文件(将文件名传递给编辑器),保存然后从你的程序中读取它呢?我一直认为 git 的工作方式相同。

于 2013-01-08T15:11:53.237 回答