私のアプリケーションでは、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 秒未満に短縮できる他の方法はありますか?