SCANDIR(3)

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

書式
#include <sys/types.h> #include <dirent.h> int scandir(const char *dirname, struct dirent ***namelist, int \*(lp*select\*(rp\*(lpstruct dirent *\*(rp, int \*(lp*compar\*(rp\*(lpconst void *, const void *\*(rp) int alphasort(const void *d1, const void *d2)

解説
scandir() 関数はディレクトリ dirname を読み取り、 malloc(3) を使用してディレクトリエントリを指すポインタの配列を作成します。 そして配列内のエントリの数を返します。 ディレクトリエントリの配列を指すポインタは、 namelist が参照する位置に保存されます。

select パラメータは、どのエントリを配列に入れるかを選択するために scandir() によって呼び出される、ユーザ定義サブルーチンを指すポインタです。 選択ルーチンにはディレクトリエントリを指すポインタが渡されます。 また、ディレクトリエントリを配列に入れる場合は非 0 の値を返さなくてはなりません。 select が NULL の場合、すべてのディレクトリエントリが組み入れられます。

compar パラメータは、ユーザ定義サブルーチンを指すポインタであり、 このサブルーチンは完成した配列をソートするために qsort(3) に渡されます。このポインタが NULL の場合、配列はソートされません。

alphasort() 関数は、 compar パラメータに使用できるルーチンで、配列をアルファベット順にソートします。

配列用に割当てられたメモリを free(3) で割当て解除できます。その場合、 配列内の各ポインタを解放してから、配列自体を解放してください。

診断
ディレクトリが読み取り用に開けない場合、または malloc(3) がすべてのデータ構造を保持するのに十分なメモリを割り当てできない場合は -1 を返します。

関連項目
directory(3), malloc(3), qsort(3), dir(5)

歴史
scandir() と alphasort() 関数は 4.2BSD で登場しました。