2013-01-08 31 views
0

我正在创建一个简单的日志程序。当用户输入log some_file到控制台中时,程序当前仅接收来自cin的一些基本输入,并将其记录到some_file中。如何在C++中打开Nano并从中获取字符串?

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

然后,当消息完成后,我想让我的C++记录器以字符串的形式接收它并继续。

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

我该如何做到这一点?

(最好不使用工具,如期望的那样,只是纯粹的C++代码。)

回答

1

如果你想使用Nano编辑器,那么你需要运行system()函数来调用Nano和一个临时文件。然后,如果使用使用tmpnam()由DevSolar

char filename[L_tmpnam]; 
tmpnam(filename); 
std::string cmd = "/bin/nano " + filename 
system(cmd.c_str()); 
unlink(filename); 
+1

的建议以后删除文件..

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()); 

更新

的问题,这有可能是另一个'out.txt'在'/ tmp'中,它可以具有另一个用户的权限(如果你还没有理解,请查看'/ tmp'上的粘性位)。最好的选择是让一个库为你创建一个临时文件,例如,命令行中的'mktemp'会为你创建一个临时文件。 –

+0

但是要从C++运行mktemp,您需要再次依赖system()。你需要知道在运行时创建的文件名。使用getpid(),一些其他更独特的字符串将它附加到文件名并自己生成它会更好吗? – Ajith

+1

您可以使用库函数'tmpnam()',它为函数调用**时临时文件不存在**提供了一个稍微唯一的名称。不用说,这也不是100%安全的。 – DevSolar

4

大多数编辑期待与正常文件的工作,所以你通常会创建一个临时文件,然后传递文件的名称编辑器的命令行。编辑器返回时,将临时文件中的内容复制到日志中,然后销毁该文件。

0

如何打开一个文件(将文件名传递给编辑器),保存并从程序中读取它?我一直认为git以同样的方式工作。

相关问题