「popenでコマンドの出力を読み込む」の版間の差分
提供: C言語入門
(ページの作成:「C言語では、system()やexec()などの関数でコマンドを実行できます。popen()を使用することで、コマンドを実行し、その出力を読み...」) |
|||
(同じ利用者による、間の1版が非表示) | |||
行1: | 行1: | ||
− | C言語では、system()やexec()などの関数でコマンドを実行できます。popen() | + | C言語では、system()やexec()などの関数でコマンドを実行できます。popen()を使用することで、コマンドを実行し、その出力を読み込んだり、コマンドの入力にデータを流し込むことが簡単にできます。ここでは、WindowsでMinGWを使用し、popenでdirコマンドを実行します。 |
'''読み方''' | '''読み方''' | ||
行13: | 行13: | ||
コマンドを実行し、その出力を受け取りたいときには、pipe(),dup(),fork() を併用して実現することもできますが、popenを使用することで、プログラムを簡単に書くことができます。 | コマンドを実行し、その出力を受け取りたいときには、pipe(),dup(),fork() を併用して実現することもできますが、popenを使用することで、プログラムを簡単に書くことができます。 | ||
− | == | + | == MinGWを使用してWindowsでpopenを使う例 == |
dirコマンドを実行し、プログラムでdirコマンドの標準出力を読み込み、表示するだけのプログラムです。 | dirコマンドを実行し、プログラムでdirコマンドの標準出力を読み込み、表示するだけのプログラムです。 | ||
− | Windows7 | + | Windows7 Ultimate 64bitの環境でMinGWを使用しています。 |
+ | gcc version 4.8.1 (rev5, Built by MinGW-W64 project) | ||
=== ソースコード win_popen.c === | === ソースコード win_popen.c === | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
行50: | 行51: | ||
=== 実行例 === | === 実行例 === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | + | C:\c>a.exe | |
− | + | ||
=====> ドライブ C のボリューム ラベルは ボリューム です | =====> ドライブ C のボリューム ラベルは ボリューム です | ||
=====> ボリューム シリアル番号は 0000-0000 です | =====> ボリューム シリアル番号は 0000-0000 です | ||
行67: | 行67: | ||
=====> 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:10時点における最新版
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 バイトの空き領域
関連項目
- プロセスの作成 fork
- 複数の子プロセスをforkする
- コマンドの実行 exec
- popenでコマンドの出力を読み込む