Deprecated: Array and string offset access syntax with curly braces is deprecated in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/inc/init.php on line 542
====== Shellコマンドを実行 ====== ---- ナイーブには * system 関数 * popen 関数 を使う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 ) .... .... // コマンドの標準出力を1行ずつ読んで(bufferに格納)好きな処理を実行 .... } pclose(pipe); // パイプをclose ※忘れずに! 注意点として、[[http://panda.holy.jp/2014/07/312/|pcloseでストリームを閉じた後にプロセスの終了待ちをしている]]ため、 popenで呼び出したプロセスが終了しないままpcloseしてしまうと、そのプロセスが失敗してしまうらしい。