ディレクトリにあるファイル名の取得

Perlだったら楽勝なんですが、C言語ではどうやるかが
わからなかったので調べてみた。

opendirでディレクトリを読み出して、readdirでディレクトリ
エントリを読み出してファイル名を取得できる。

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

int main (int argc, char *argv[])
{
    char *dirname;
    DIR *dirp;
    struct dirent *p;
    struct stat    s;
    int retval;

    if (argc != 2) {
        dirname = ".";
    } else {
        dirname = argv[1];
    }

    if ((dirp = opendir(dirname)) == NULL) {
        fprintf(stderr, "Can't open directory %s\n", dirname);
        return -1;
    }

    while ((p = readdir(dirp)) != NULL) {
        retval = stat(p->d_name, &s);
        if (retval != 0) {
            fprintf(stderr, "Can't stat %s\n", p->d_name);
            return -1;
        }

        if ((s.st_mode & S_IFMT) == S_IFREG) {
            printf("Filename %10s Size %10ld\n", p->d_name, s.st_size);
        }
    }

    if (closedir(dirp) != 0) {
        fprintf(stderr, "Can't close directory %s\n", dirname);
        return -1;
    }

    return 0;
}

statも使ってファイルサイズを取得してみました。

C言語の manを見ても構造体がどんな感じなのかがわからないことが
多くて困る。本がないと調べるのが手間だったりしますね。引数が
増えると調べることもいっぱいって感じになりますし。

[rakuten:book:12240193:detail]