Man page - versionsort(3)

Packages contains this manual

Available languages:

en fr ja de

Manual

SCANDIR

名 前
書 式
説 明
scandirat()
返 り 値
エ ラ ー
バ ー ジ ョ ン
属 性
準 拠
注 意

プ ロ グ ラ ム の ソ ー ス
関 連 項 目
こ の 文 書 に つ い て

名 前

scandir, scandirat, 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 struct dirent ** a , const struct dirent ** b );

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

#include <fcntl.h> /* AT_* 定 数 の 定 義 */
#include <dirent.h>

int scandirat(int dirfd , const char * dirp ,
struct dirent ***
namelist ,

int (* filter )(const struct dirent *),
int (*
compar )(const struct dirent **, const struct dirent **));

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

scandir (), alphasort ():

/* glibc 2.10 以 降 : */ _POSIX_C_SOURCE >= 200809L
|| /* glibc 2.19 以 前 : */ _BSD_SOURCE || _SVID_SOURCE

versionsort (): _GNU_SOURCE

scandirat (): _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) を 用 い る 。

scandirat()

scandirat () 関 数 は scandir () と 全 く 同 様 の 動 作 を す る 。 こ こ で は 差 分 を 説 明 す る 。

dirp で 指 定 さ れ た パ ス 名 が 相 対 パ ス の 場 合 、 フ ァ イ ル デ ィ ス ク リ プ タ ー dirfd が 参 照 す る デ ィ レ ク ト リ か ら の 相 対 パ ス と 解 釈 さ れ る 。 (一 方 、 scandir () の 場 合 は 、 相 対 パ ス 名 は 、 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ か ら の 相 対 パ ス と 解 釈 さ れ る 。 )

dirp が 相 対 パ ス で dirfd が 特 別 な 値 AT_FDCWD の 場 合 、 dirp は ( scandir () と 同 様 に ) 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ か ら の 相 対 パ ス と 解 釈 さ れ る 。

dirp が 絶 対 パ ス の 場 合 、 dirfd は 無 視 さ れ る 。

scandirat () が 必 要 な 理 由 に つ い て は openat (2) を 参 照 の こ と 。

返 り 値

scandir () 関 数 は 、 選 択 さ れ た デ ィ レ ク ト リ の エ ン ト リ ー 数 を 返 す 。 エ ラ ー の 場 合 、 -1 を 返 し 、 errno に エ ラ ー の 原 因 を 示 す 値 を 設 定 す る 。

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

エ ラ ー

ENOENT

dirp で 指 定 さ れ た パ ス が 存 在 し な い 。

ENOMEM

操 作 を 完 了 す る の に 十 分 な メ モ リ ー が な い 。

ENOTDIR

dirp で 指 定 さ れ た パ ス が デ ィ レ ク ト リ で は な い 。

scandirat () で は 、 上 記 に 加 え て 以 下 の エ ラ ー も 発 生 す る 。

EBADF

dirfd が 有 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー で は な い 。

ENOTDIR

dirp が 相 対 パ ス で 、 dirfd が デ ィ レ ク ト リ 以 外 の フ ァ イ ル を 参 照 し て い る フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。

バ ー ジ ョ ン

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

scandirat () は glibc バ ー ジ ョ ン 2.15 で 追 加 さ れ た 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-34387-1.png

準 拠

alphasort (), scandir (): 4.3BSD, POSIX.1-2008.

versionsort () と scandirat () は GNU 拡 張 で あ る 。

注 意

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

glibc 2.10 よ り 前 で は 、 alphasort () と versionsort () の 2 つ の 引 数 の 型 は const void * で あ っ た 。 alphasort () が POSIX.1-2008 で 標 準 化 さ れ た 際 、 引 数 の 型 は 型 安 全 な const struct dirent ** と し て 規 定 さ れ 、 glibc 2.10 は alphasort () (と 非 標 準 の versionsort ()) の 定 義 を 標 準 に 合 致 す る よ う に 変 更 し た 。

以 下 の プ ロ グ ラ ム は 、 現 在 の デ ィ レ ク ト リ 内 の フ ァ イ ル 一 覧 を 逆 順 で 表 示 す る 。

プ ロ グ ラ ム の ソ ー ス

#define _DEFAULT_SOURCE
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
struct dirent **namelist;
int n;

n = scandir(".", &namelist, NULL, alphasort);
if (n == -1) {
perror("scandir");
exit(EXIT_FAILURE);
}

while (n--) {
printf("%s\n", namelist[n]->d_name);
free(namelist[n]);
}
free(namelist);

exit(EXIT_SUCCESS);
}

関 連 項 目

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

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。