「popenでコマンドの出力を読み込む」の版間の差分

提供: C言語入門
移動: 案内検索
(ページの作成:「C言語では、system()やexec()などの関数でコマンドを実行できます。popen()を使用することで、コマンドを実行し、その出力を読み...」)
 
(実行例)
行50: 行50:
 
=== 実行例 ===
 
=== 実行例 ===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
h:\tmp\c>a.exe
+
C:\c>a.exe
hoge
+
 
=====>  ドライブ 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 バイトの空き領域

関連項目