system()命令不能正常工作C ++ linux

时间:2016-07-04 02:41:51

标签: c++ linux shell stl

我用C ++编写程序作为linux中dvd驱动器的GUI。为了枚举驱动器,我使用了以下代码:

std::string filnam = "donotdelete.dlt";
std::stringstream cmd;
cmd << "> " << filnam;  //create new file or empty file if already exists
system(cmd.str().c_str());
int NUMDRIVES = 4; //on my system the number of DVD/BluRay drives

for(int i=0; i<NUMDRIVES; ++i) {
    std::string left = "\"echo $(blkid /dev/sr", middle = " | awk -F '\"' '{print $2}' 2>&1) >> ";
    cmd.str("");
    cmd << "echo " << i << ">> " << filnam;
    std::system(cmd.str().c_str());
    cmd <<left<<i<<middle<<filnam<<"\"";
    std::system(cmd.str().c_str());
}

UNIX命令是blkid,用于获取有关cd / dvd / bluray的信息,使用awk提取驱动器中光盘的名称,然后将光盘的名称写入文件。基本上,文件永远不会被创建,也不会被写入。如果我完全按照wxMessageBox中的显示复制命令并将其粘贴到终端,则命令将按预期执行。有人可以解释为什么它不能在上面的C ++代码中工作吗? 请不要告诉我我应该使用C ++编写文件,因为我需要在本程序中使用shell来执行其他命令,并且请不要建议使用C ++以外的其他语言。我已经包括在内。此外,我尝试过使用管道,但在进入代码中的下一步之前,我需要命令才能完成执行。提前谢谢你。

1 个答案:

答案 0 :(得分:0)

我最终在我的system()函数中调用了/ bin / bash,而bash特定的代码似乎有效。