SCANDIR(3)

名前
scandir, alphasort - ディレクトリを走査する

書式
#include <dirent.h>

int scandir(const char *dir, struct dirent ***namelist,
    int (*select)(const struct dirent *),
    int (*compar)(const struct dirent **, const struct dirent **));

int alphasort(const struct dirent **a, const struct dirent **b);

説明
関数 scandir() はディレクトリ dir を走査し、 ディレクトリの各エントリを引き数として select() を呼び出す。 select() が非零値を返すエントリは malloc() によって 確保された文字列に保存され, 比較関数 compar() を用いて qsort() によりソートされ、malloc() により確保された配列 namelist にまとめられる。 もし select が NULL ならば, すべてのエントリが選択される。

関数 alphasort() はディレクトリのエントリをアルファベット順に ソートするために、scandir() 関数の比較関数として使用すること ができる。 (alphasort() の)引き数は、比較するための2つのディレクトリエントリ a と b である。

返り値
関数 scandir() は選択されたエントリの数か、(エラーが発生した場合) -1 を返す。

関数 alphasort() は1番目の引き数が2番目の引き数にたいして、 [小さい/等しい/大きい]かに応じて、0 より[小さい/等しい/大きい]値を返す。

エラー

ENOMEM
    動作を完遂するにはメモリが足りない。

準拠
BSD 4.3

例
/* カレントディレクトリのファイルを逆順に出力する */
#include <dirent.h>
main(){
    struct dirent **namelist;
    int n;
    n = scandir(".", &namelist, 0, alphasort);
    if (n < 0)
        perror("scandir");
    else
        while(n--) printf("%s\n", namelist[n]->d_name);
}

関連項目
opendir(3), readdir(3), closedir(3), rewinddir(3), telldir(3), seekdir(3).