C言語 - 標準入力をパイプする popen - 標準入力をパイプする

クラウディア 
1. ソース
2. Makefile
3. 実行

1. ソース


> ls -la
合計 36K
drwxr-xr-x 2 kitayama kitayama   512  5月 18 11:14 .
drwxr-xr-x 4 kitayama kitayama   512  5月 18 09:42 ..
-rw-r--r-- 1 kitayama kitayama   129  5月 18 09:54 Makefile
-rwxr-xr-x 1 kitayama kitayama 11246  5月 18 11:14 popen
-rw-r--r-- 1 kitayama kitayama   499  5月 18 11:14 popen.c
-rw-r--r-- 1 kitayama kitayama  6648  5月 18 11:14 popen.o
 という状況で

./popen.c
 を作成して以下のように記述。

#include <stdio.h>
#define MAX_LINE 100
#define MAX_BUFF 2048

int main(int argc, char* argv[])
{
    char a[100][2048] = {};

    int i;

    FILE *file = NULL;

    file = popen("ls -la", "r");

    if (file == NULL)
    {
        perror("");
        return 0;
    }

    for (i=0; i<MAX_LINE; i++)
    {
        if (fgets(a[i], sizeof(a[0]), file) == EOF)
        {
            break;
        }
    }

    pclose(file);

    for (i=0; i<MAX_LINE; i++)
    {
        if (a[i][0] == '\0')
        {
            break;
        }

        printf("%s", a[i]);
    }

    return 0;
}

2. Makefile

./Makefile
 を作成して以下のように記述。

.PHONY  = target
CC      = clang

target  : popen.o Makefile
        $(CC) -O0 -g -o popen popen.o

.c.o    : Makefile
        $(CC) -O0 -g -c $< -o $@

3. 実行

 make して実行します。

> make
clang -O0 -g -o popen popen.o
> ./popen
total 36
drwxr-xr-x  2 kitayama  kitayama    512  5月 18 11:26 .
drwxr-xr-x  4 kitayama  kitayama    512  5月 18 09:42 ..
-rw-r--r--  1 kitayama  kitayama    129  5月 18 09:54 Makefile
-rwxr-xr-x  1 kitayama  kitayama  11246  5月 18 11:26 popen
-rw-r--r--  1 kitayama  kitayama    499  5月 18 11:14 popen.c
-rw-r--r--  1 kitayama  kitayama   6648  5月 18 11:14 popen.o
earthcar(アースカー)