在我的家用Linux笔记本上,我喜欢为我经常使用的东西编写包装程序和GUI助手。 不过,我不太喜欢Bash脚本,所以我在C ++中做了很多东西。 不过,很多时候,这需要我使用cstdlib中的system()函数。
这个system()命令很棒,但我想要一个方法来调用system()并接收stdout / stderror。 system()命令只返回命令的返回码。 所以,在Bash脚本中,可以这样做:
myVar=$(ls -a | grep 'search string') echo $myVar
myVar会输出命令的标准输出。 所以我开始编写一个包装类,它将在命令的末尾添加一个pipe道到文件,打开文件,读取所有pipe道输出,并将其作为一个长string或string的vector返回。 这个class的错综复杂并不是真的有意义(我不认为),但是上面的例子可以这样做:
SystemCommand systemCommand; systemCommand.setCommand("ls -a | grep 'search string' "); systemCommand.execute(); std::cout << systemCommand.outputAsstring() << std::endl;
在幕后,当调用systemCommand.execute()时,类将确保该命令将当前工作目录中的所有stdout / stderr正确pipe道化为随机生成的文件名。 举个例子,上面的命令最终会成为
为什么这个bash代码不工作?
POSIX,UNIX,path,VIM和其他一个Windows用户的噩梦
在Linux操作窗口大小通过编译代码?
在命令行上是否有Java API查看器,如man for c和ri for ruby?
cmd 2>&1> log vs cmd> log 2>&1
"ls -a | grep 'search string' >> 1452-24566.txt 2>&1".
然后,类使用ifstream尝试打开并从该文件读取:
std::ifstream readFromFile; readFromFile.open(_outputFilename); if (readFromFile.is_open()) { //Read all contents of file into class member vector ... readFromFile.close(); //Remove temporary file ... } else { //Handle read failure }
所以这里是我的主要问题将std :: ifstream永远无法打开当前工作目录中最近创build的文件? 如果是这样,那将是什么方式使其更强大(特别是在Linux上)?
一个方面/第二个问题:是否有一个非常简单的方法来实现我想要实现而不使用文件pipe道? 也许有些东西在unistd.h中可用? 谢谢你的时间。
如何find所有包含来源的目录?
从 unnnn转换为字母
使用shell脚本查找和移动文件到适当的目录
是一个叫某处的脚本
Bash shell脚本,只用脚本的某个部分运行&
所以这里是我的主要问题将std :: ifstream永远无法打开当前工作目录中最近创建的文件?
是。
安装USB拇指驱动器(或其他可移动媒体)
cd到安装
执行你的程序。 在执行时,请移除驱动器。
注意发生IO错误。
如果是这样,那将是什么方式使其更强大(特别是在Linux上)?
在/tmp临时文件,其目的是临时文件。 或者根本不要创建一个文件,而是使用管道来进行通信(就像harpen建议的一样)。 即便如此,也没有保证。 尽量妥善处理错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。