我正在创建一个简单的日志记录程序。当用户进入log some_file
控制台时,程序当前只是简单地接收来自 的一些基本输入cin
,并将其记录到some_file
.
但是,我不想使用 实现我自己的编辑器cin
,而是想打开 Nano 编辑器并让用户在那里编辑他的消息。
然后,当消息完成时,我希望我的 C++ 记录器将其作为字符串接收并继续。
这正是 git 在提交时所做的。
我怎样才能做到这一点?
(最好不使用expect等工具,只使用原始C++代码。)
我正在创建一个简单的日志记录程序。当用户进入log some_file
控制台时,程序当前只是简单地接收来自 的一些基本输入cin
,并将其记录到some_file
.
但是,我不想使用 实现我自己的编辑器cin
,而是想打开 Nano 编辑器并让用户在那里编辑他的消息。
然后,当消息完成时,我希望我的 C++ 记录器将其作为字符串接收并继续。
这正是 git 在提交时所做的。
我怎样才能做到这一点?
(最好不使用expect等工具,只使用原始C++代码。)
大多数编辑器都希望使用普通文件,因此您通常会创建一个临时文件,然后在其命令行上将该文件的名称传递给编辑器。当编辑器返回时,您将临时文件中的内容复制到您的日志中,然后销毁该文件。
如果要使用 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);
打开一个文件(将文件名传递给编辑器),保存然后从你的程序中读取它呢?我一直认为 git 的工作方式相同。