ナイーブには
を使う2通りがある。
ただコマンドを実行したいだけであればsystem関数を使えば良いが、system関数の返り値はshellの終了ステータスであり、
実行結果の出力を得ることはできない。
コマンドの実行結果を得たい(例えば ls を実行してファイルのリストを得たい)時は popen関数
popen関数はFILEポインタを返り値に持ち、パイプ(コマンドの標準出力)を(仮想の)ファイルとして開く。
それを読み込むことでコマンドの実行結果を得ることができる。
char *command = "...";//実行したい任意のコマンド FILE *pipe; char buffer[256]; if( (pipe = popen(command,"r"))==NULL ){// パイプをopen std::cout << "failed." << std::endl; return 1; } while( fgets(buffer,sizeof(buffer),pipe)!=NULL ){ strtok(buffer,"\n\0");// bufferには改行コードが含まれてしまっているのでそれをNULLに置換 (#include <cstring>) .... .... // コマンドの標準出力を1行ずつ読んで(bufferに格納)好きな処理を実行 .... } pclose(pipe); // パイプをclose ※忘れずに!
注意点として、pcloseでストリームを閉じた後にプロセスの終了待ちをしているため、 popenで呼び出したプロセスが終了しないままpcloseしてしまうと、そのプロセスが失敗してしまうらしい。