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

提供: C言語入門
移動: 案内検索
スポンサーリンク

C言語では、system()やexec()などの関数でコマンドを実行できます。popen()を使用することで、コマンドを実行し、その出力を読み込んだり、コマンドの入力にデータを流し込むことが簡単にできます。ここでは、WindowsでMinGWを使用し、popenでdirコマンドを実行します。

読み方

popen
ぴーおーぷん

概要

C言語で外部コマンドを実行する方法は、いくつかあります。

  • system関数を利用する
  • popen関数を利用する
  • exec系関数を利用する

コマンドを実行し、その出力を受け取りたいときには、pipe(),dup(),fork() を併用して実現することもできますが、popenを使用することで、プログラムを簡単に書くことができます。

MinGWを使用してWindowsでpopenを使う例

dirコマンドを実行し、プログラムでdirコマンドの標準出力を読み込み、表示するだけのプログラムです。 Windows7 Ultimate 64bitの環境でMinGWを使用しています。

gcc version 4.8.1 (rev5, Built by MinGW-W64 project)

ソースコード 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 バイトの空き領域

関連項目




スポンサーリンク