この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ja:cpp:shellcommand [2017/06/02 03:32] kota |
ja:cpp:shellcommand [2018/04/12 06:57] (現在) kota |
||
---|---|---|---|
ライン 4: | ライン 4: | ||
ナイーブには | ナイーブには | ||
* system 関数 <cstdlib> | * system 関数 <cstdlib> | ||
- | * popen 関数 <csdio> | + | * popen 関数 <cstdio> |
を使う2通りがある。\\ | を使う2通りがある。\\ | ||
ただコマンドを実行したいだけであればsystem関数を使えば良いが、system関数の返り値はshellの終了ステータスであり、 | ただコマンドを実行したいだけであればsystem関数を使えば良いが、system関数の返り値はshellの終了ステータスであり、 | ||
ライン 22: | ライン 22: | ||
while( fgets(buffer,sizeof(buffer),pipe)!=NULL ){ | while( fgets(buffer,sizeof(buffer),pipe)!=NULL ){ | ||
- | strtok(buffer,"\n\0");// bufferには改行コードが含まれてしまっているのでそれをNULLに置換 <string> | + | strtok(buffer,"\n\0");// bufferには改行コードが含まれてしまっているのでそれをNULLに置換 (#include <cstring>) |
.... | .... | ||
- | .... // コマンドの標準出力を1行ずつ読んで処理を実行 | + | .... // コマンドの標準出力を1行ずつ読んで(bufferに格納)好きな処理を実行 |
.... | .... | ||
} | } | ||
ライン 30: | ライン 30: | ||
</code> | </code> | ||
+ | 注意点として、[[http://panda.holy.jp/2014/07/312/|pcloseでストリームを閉じた後にプロセスの終了待ちをしている]]ため、 | ||
+ | popenで呼び出したプロセスが終了しないままpcloseしてしまうと、そのプロセスが失敗してしまうらしい。 |