「popenでコマンドの出力を読み込む」の版間の差分
提供: C言語入門
(ページの作成:「C言語では、system()やexec()などの関数でコマンドを実行できます。popen()を使用することで、コマンドを実行し、その出力を読み...」) |
(相違点なし)
|
2014年6月8日 (日) 17:00時点における版
C言語では、system()やexec()などの関数でコマンドを実行できます。popen()を使用することで、コマンドを実行し、その出力を読み込んだり、コマンドの入力にデータを流し込むことが簡単にできます。ここでは、Windowsでmingwを使用し、popenでdirコマンドを実行します。
読み方
- popen
- ぴーおーぷん
概要
C言語で外部コマンドを実行する方法は、いくつかあります。
- system関数を利用する
- popen関数を利用する
- exec系関数を利用する
コマンドを実行し、その出力を受け取りたいときには、pipe(),dup(),fork() を併用して実現することもできますが、popenを使用することで、プログラムを簡単に書くことができます。
mingwを使用してWindowsでpopenを使う例
dirコマンドを実行し、プログラムでdirコマンドの標準出力を読み込み、表示するだけのプログラムです。 Windows7 64bit
ソースコード win_popen.c
#include <stdio.h> #include <stdlib.h> #define BUF 256 int main (int argc, char *argv[]) { FILE *fp; char *cmdline = "dir"; if ( (fp=popen(cmdline,"r")) ==NULL) { perror ("can not exec commad"); exit(EXIT_FAILURE); } char buf[BUF]; while (!feof(fp)) { fgets(buf, sizeof(buf), fp); printf("=> %s", buf); } (void) pclose(fp); exit (EXIT_SUCCESS); }
コンパイル
c:\c>gcc win_popen.c
実行例
h:\tmp\c>a.exe hoge =====> ドライブ C のボリューム ラベルは ボリューム です =====> ボリューム シリアル番号は 0000-0000 です =====> =====> c:\c のディレクトリ =====> =====> 2014/06/08 16:48 <DIR> . =====> 2014/06/08 16:48 <DIR> .. =====> 2014/06/08 16:48 26,059 .win_popen.c.un~ =====> 2014/06/08 16:48 45,243 a.exe =====> 2014/06/08 16:48 731 win_popen.c =====> 2014/06/08 16:48 745 win_popen.c~ =====> 4 個のファイル 72,778 バイト =====> 2 個のディレクトリ 1,456,740,741,120 バイトの空き領域 =====> 2 個のディレクトリ 1,456,740,741,120 バイトの空き領域
関連項目
- プロセスの作成 fork
- 複数の子プロセスをforkする
- コマンドの実行 exec
- popenでコマンドの出力を読み込む