popenでコマンドの出力を読み込む

提供: C言語入門
2014年6月8日 (日) 17:00時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「C言語では、system()やexec()などの関数でコマンドを実行できます。popen()を使用することで、コマンドを実行し、その出力を読み...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

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 バイトの空き領域

関連項目




スポンサーリンク