SCANDIR

Section: Linux Programmer's Manual (3)
Updated: 2009-02-10
Index JM Home Page roff page
 

名前

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

書式

#include <dirent.h>

int scandir(const char *dirp, struct dirent ***namelist,
int (*filter)(const struct dirent *), int (*compar)(const struct dirent **, const struct dirent **));
int alphasort(const void *a, const void *b); int versionsort(const void *a, const void *b);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

scandir(), alphasort(): _BSD_SOURCE || _SVID_SOURCE
versionsort(): _GNU_SOURCE  

説明

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

比較関数 compar() には alphasort() 関数と versionsort() 関数を使うことができる。 alphasort() は strcoll(3) を用いてディレクトリエントリをソートし、 versionsort() は文字列 (*a)->d_name(*b)->d_name に対して strverscmp(3) を用いる。  

返り値

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

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

エラー

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

バージョン

versionsort() は、glibc バージョン 2.1 で追加された。  

準拠

alphasort() と scandir() は POSIX.1-2008 で規定されており、広く利用可能である。 versionsort() は GNU 拡張である。

関数 scandir() と alphasort() は 4.3BSD から取り入れられ、Linux では libc4 から使用可能になった。 libc4 と libc5 では以下のようなもっと詳細なプロトタイプを使っている。

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

しかし glibc 2.0 では不正確な BSD のプロトタイプに戻った。

関数 versionsort() は GNU の拡張であり、glibc 2.1 以降で使用可能である。

glibc 2.1 以降では alphasort() は strcoll(3) を呼び出す。 alphasort() は以前は strcmp(3) を使っていた。  

#define _SVID_SOURCE
/* カレントディレクトリのファイルを逆順に出力する */
#include <dirent.h>

int
main(void)
{
    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);
            free(namelist[n]);
        }
        free(namelist);
    }
}
 

関連項目

closedir(3), fnmatch(3), opendir(3), readdir(3), rewinddir(3), seekdir(3), strcmp(3), strcoll(3), strverscmp(3), telldir(3)


 

Index

名前
書式
説明
返り値
エラー
バージョン
準拠
関連項目

This document was created by man2html, using the manual pages.
Time: 03:26:53 GMT, April 25, 2010