「popenでコマンドの出力を読み込む」の版間の差分
提供: C言語入門
(ページの作成:「C言語では、system()やexec()などの関数でコマンドを実行できます。popen()を使用することで、コマンドを実行し、その出力を読み...」) |
(→実行例) |
||
行50: | 行50: | ||
=== 実行例 === | === 実行例 === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | + | C:\c>a.exe | |
− | + | ||
=====> ドライブ C のボリューム ラベルは ボリューム です | =====> ドライブ C のボリューム ラベルは ボリューム です | ||
=====> ボリューム シリアル番号は 0000-0000 です | =====> ボリューム シリアル番号は 0000-0000 です | ||
行67: | 行66: | ||
=====> 2 個のディレクトリ 1,456,740,741,120 バイトの空き領域 | =====> 2 個のディレクトリ 1,456,740,741,120 バイトの空き領域 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
== 関連項目 == | == 関連項目 == | ||
{{process}} | {{process}} | ||
<!-- vim: filetype=mediawiki | <!-- vim: filetype=mediawiki | ||
--> | --> |
2014年6月8日 (日) 17:06時点における版
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
実行例
C:\c>a.exe =====> ドライブ 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でコマンドの出力を読み込む