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
✎ ja:cpp:shellcommand [GiriWiki]
内容へ移動
GiriWiki
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
ja:cpp:shellcommand
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== Shellコマンドを実行 ====== ---- ナイーブには * system 関数 <cstdlib> * popen 関数 <cstdio> を使う2通りがある。\\ ただコマンドを実行したいだけであればsystem関数を使えば良いが、system関数の返り値はshellの終了ステータスであり、 実行結果の出力を得ることはできない。\\ コマンドの実行結果を得たい(例えば ls を実行してファイルのリストを得たい)時は popen関数 popen関数はFILEポインタを返り値に持ち、パイプ(コマンドの標準出力)を(仮想の)ファイルとして開く。 それを読み込むことでコマンドの実行結果を得ることができる。 <code cpp> 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 ※忘れずに! </code> 注意点として、[[http://panda.holy.jp/2014/07/312/|pcloseでストリームを閉じた後にプロセスの終了待ちをしている]]ため、 popenで呼び出したプロセスが終了しないままpcloseしてしまうと、そのプロセスが失敗してしまうらしい。
ja/cpp/shellcommand.txt
· 最終更新: 2018/04/12 06:57 by
kota
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ