0

私のアプリケーションでは、C++ コードを介して大量のシェル コマンドを実行する必要があります。プログラムが 6000 個のコマンドを実行するのに 30 秒以上かかることがわかりました。(c/c++ コードを使用して) シェル コマンドを実行する他のより良い方法はありますか?

    //Below functions is used to set rules for 
    //Linux tool --TC, and in runtime there will 
    //be more than 6000 rules to be set from shell
    //those TC commans are like below example:

    //tc qdisc del dev eth0 root 
    //tc qdisc add dev eth0 root handle 1:0 cbq bandwidth 
    //   10Mbit avpkt 1000 cell 8
    //tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth
    //   100Mbit rate 8000kbit weight 800kbit prio 5 allot 1514 
    //   cell 8 maxburst 20 avpkt 1000 bounded
    //tc class add dev eth0 parent 1:0 classid 1:2 cbq bandwidth 
    //   100Mbit rate 800kbit weight 80kbit prio 5 allot 1514 cell 
    //   8 maxburst 20 avpkt 1000 bounded
    //tc class add dev eth0 parent 1:0 classid 1:3 cbq bandwidth 
    //   100Mbit rate 800kbit weight 80kbit prio 5 allot 1514 cell 
    //   8 maxburst 20 avpkt 1000 bounded
    //tc class add dev eth0 parent 1:1 classid 1:1001 cbq bandwidth 
    //   100Mbit rate 8000kbit weight 800kbit prio 8 allot 1514 cell 
    //   8 maxburst 20 avpkt 1000
    //......

    void CTCProxy::ApplyTCCommands(){
        FILE* OutputStream = NULL;        

        //mTCCommands is a vector<string>
        //every string in it is a TC rule               
        int CmdCount = mTCCommands.size();
        for (int i = 0; i < CmdCount; i++){            
            OutputStream = popen(mTCCommands[i].c_str(), "r");
            if (OutputStream){
                pclose(OutputStream);
            } else {
                printf("popen error!\n");
            }     
        }
    }

更新
すべてのシェル コマンドをシェル スクリプトに入れようとし、テスト アプリが system("xxx.sh") を使用してこのスクリプト ファイルを呼び出せるようにしました。今回は、シェル コマンドの 6000 エントリすべてを実行するのに 24 秒かかりましたが、これは以前よりも短くなっています。しかし、これはまだ私たちが予想していたよりもはるかに大きいです! 実行時間を 10 秒未満に短縮できる他の方法はありますか?

4

2 に答える 2