如何在c ++中使用一个system()函数运行2个命令

时间:2017-02-09 19:21:40

标签: c++ windows winforms cmd c++-cli

我想在一个system()函数c ++中执行2 cmd命令,但是一个cmd命令作为连接传递:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

            System::String^ managedString = textBox1->Text; 

             msclr::interop::marshal_context context;
    std::string standardString = context.marshal_as<std::string>(managedString);

    std::string s2 = "yara64 -r test.yara " + standardString;

    system(s2.c_str() && "pause");

}

这段代码不起作用。这只有在我删除&#34;暂停&#34;命令。如何准确执行&#34;暂停&#34;一个系统中的命令()?

请帮帮我。非常感谢!

2 个答案:

答案 0 :(得分:0)

制作“&amp;&amp;”字符串本身的一部分。

std::string s2 = "yara64 -r test.yara " + standardString + "&& pause";
system(s2.c_str());

顺便说一句,学会避免system()。对于那些了解它的局限性的大多数程序员来说,它可能会使代码看起来很糟糕。使用您展示的方式时,还有一些容易被忽视的安全风险。

如果您需要从执行的命令中读取输出,则可以使用popen()

最好通过操作系统API(如CreateProcess()execve()创建新流程来调用yara64,因为它们提供了更大的灵活性,可以更好地控制命令的执行方式。在大多数实现中,这些是API system()调用的内容或变体。

如果担心可移植性,那么system()调用的shell是实现定义的,并且在没有#ifdef的情况下,从OS到OS的语法几乎不可能跨平台编写。

答案 1 :(得分:0)

“&amp;&amp; pause”应该是字符串的一部分,所以它应该是这样的:

std::string s2 = "yara64 -r test.yara " + standardString + "&& pause";

system(s2.c_str());