ディレクトリ内容の取得

このエントリーをはてなブックマークに追加

前回はディレクトリの基本操作を解説しました。今回はディレクトリ内容の取得方法について解説していきます。
Unixではlsコマンドを使用するのが一般的です。exec等で取得する事も可能ですが、自前でプログラムをする場合の方法を解説していきます。

ディレクトリの内容の取得

では早速プログラムを見て行きましょう。

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

int main(void)
{
    DIR *dir;
    struct dirent *dp;

    dir = opendir(".");
    if (dir == NULL) {
        return 1;
    }

    while (1) {
        dp = readdir(dir);
        if (dp == NULL) {
            break;
        }
        printf("%s\n", dp->d_name);
    }
    closedir(dir);

    return 0;
}

非常にシンプルなプログラムですが、これで問題なく動作します。
使用する関数は、opendir(3)、readdir(3)、closedir(3)の3つです。open(2)、read(2)、close(2)とよく似た使い方です。
他にはrewinddir(3), scandir(3), seekdir(3), telldir(3)等の関数もあります。

実際に動作させてみましょう。
$ ./dir_ls
dir_ls
dir_ls.c
.
..

"."、".."も表示対象に含まれており、lsとほぼ同じ動作であることが分かります。
さらに、lsと同じ動作を行うにはファイルとディレクトリの判断等が必要になってきますが、ここではその辺りについては触れないでおきます。


まとめ

いかがでしたか?意外と簡単では無いでしょうか?
次は取得したファイル一覧からファイルの種類やファイルサイズなどの情報を取得する方法を解説します。


実践的なプログラムをしたいのであれば、こういった本を手がかりにUnixのソースコードを読むのが一番良いと思います。
ソースコードはweb上でいくらでも公開されていますので是非トライしてみてください。