在C ++中使用system();不起作用

时间:2015-11-14 06:43:01

标签: c++ linux ubuntu-14.04

我需要在我的c ++代码中执行此命令: mkdir -p sample_directory / {1..10} 制作10个目录。但是当我在我的代码中的系统函数中使用它时:

system("mkdir -p sample_director/{1..10}");

执行后,只需使用此名称创建一个目录: {1..10} 我该如何解决?

3 个答案:

答案 0 :(得分:1)

你可以尝试使用循环结构来做同样的事情。

# include <cstdlib>
# include <string>

using namespace std;

int main(){
    for(int i=1;i<=10;i++){
        string str="mkdir -p sample_director/" + to_string(i);  
        system(str.c_str());
    }
    return 0;
}

使用c++11支持

运行代码
$ g++ -std=c++11 my_program.cpp

答案 1 :(得分:1)

Braix扩展不在POSIX中,因此并非所有shell都实现它。特别是在POSIX中,system应该调用sh,它应该像“普通”POSIX shell而不是bash或其他一些功能丰富的shell。所以它不会做支撑扩展。

如果您希望bash处理命令,您可以直接调用bash ...

system("bash -c 'mkdir -p sample_director/{1..10}'");

或者您可以进行10次单独的system来电。或者其他解决方法,我相信你能想到一些。

答案 2 :(得分:0)

它不起作用,因为dash不支持大括号扩展(类似{1..10}的语法)。 system函数不关心SHELL的值,它总是将提供的参数传递给/bin/sh。在Ubuntu /bin/sh上引用dash,它不能处理大括号扩展。在其他一些发行版(如Arch)上,/bin/shbash的符号链接,因此您的代码可以正常工作。

如果我是你,在这种情况下我根本不会使用systemBoost::filesystem(甚至mkdir / mkdirat)似乎对我来说是更好的选择。