Available in

(3) (3)/de (3)/es (3)/fr (3)/ja (3)/ko (3)/pt

Contents

名 前

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)

COMMENTS

blog comments powered by Disqus