<STATUS> stat: DP ppkg: LDP man-pages page: scandir.3 date: 2021/07/07 mail: amoto****@gmail***** name: Akihiro Motoki </STATUS> .\"O .TH SCANDIR 3 2020-06-09 "GNU" "Linux Programmer's Manual" .TH SCANDIR 3 2020\-06\-09 GNU "Linux Programmer's Manual" .\"O ---------------------------------------- .\"O .SH NAME .\"O scandir, scandirat, alphasort, versionsort \- scan .\"O a directory for matching entries .SH 名前 scandir, scandirat, alphasort, versionsort \- ディレクトリを走査する .\"O ---------------------------------------- .\"O .SH SYNOPSIS .\"O .nf .\"O .B #include <dirent.h> .SH 書式 .nf \fB#include <dirent.h>\fP .\"O ---------------------------------------- .\"O .PP .\"O .BI "int scandir(const char *" dirp ", struct dirent ***" namelist , .PP \fBint scandir(const char *\fP\fIdirp\fP\fB, struct dirent ***\fP\fInamelist\fP\fB,\fP .\"O ---------------------------------------- .\"O .RS .\"O .BI "int (*" filter ")(const struct dirent *)," .\"O .BI "int (*" compar ")(const struct dirent **, const struct dirent **));" .RS \fBint (*\fP\fIfilter\fP\fB)(const struct dirent *),\fP \fBint (*\fP\fIcompar\fP\fB)(const struct dirent **, const struct dirent **));\fP .\"O ---------------------------------------- .\"O .RE .RE .\"O ---------------------------------------- .\"O .PP .\"O .BI "int alphasort(const struct dirent **" a ", const struct dirent **" b ); .PP \fBint alphasort(const struct dirent **\fP\fIa\fP\fB, const struct dirent **\fP\fIb\fP\fB);\fP .\"O ---------------------------------------- .\"O .PP .\"O .BI "int versionsort(const struct dirent **" a ", const struct dirent **" b ); .PP \fBint versionsort(const struct dirent **\fP\fIa\fP\fB, const struct dirent **\fP\fIb\fP\fB);\fP .\"O ---------------------------------------- .\"O .\"O .BR "#include <fcntl.h>" " /* Definition of AT_* constants */" .\"O .B #include <dirent.h> \fB#include <fcntl.h>\fP /* AT_* 定数の定義 */ \fB#include <dirent.h>\fP .\"O ---------------------------------------- .\"O .PP .\"O .BI "int scandirat(int " dirfd ", const char *" dirp "," .\"O .BI "struct dirent ***" namelist , .PP \fBint scandirat(int \fP\fIdirfd\fP\fB, const char *\fP\fIdirp\fP\fB,\fP \fBstruct dirent ***\fP\fInamelist\fP\fB,\fP .\"O ---------------------------------------- .\"O .RS .\"O .BI "int (*" filter ")(const struct dirent *)," .\"O .BI "int (*" compar ")(const struct dirent **, const struct dirent **));" .RS \fBint (*\fP\fIfilter\fP\fB)(const struct dirent *),\fP \fBint (*\fP\fIcompar\fP\fB)(const struct dirent **, const struct dirent **));\fP .\"O ---------------------------------------- .\"O .RE .\"O .fi .RE .fi .\"O ---------------------------------------- .\"O .PP .PP .\"O ---------------------------------------- .\"O .RS -4 .\"O Feature Test Macro Requirements for glibc (see .\"O .BR feature_test_macros (7)): .RS -4 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): .\"O ---------------------------------------- .\"O .RE .RE .\"O ---------------------------------------- .\"O .PP .\"O .BR scandir (), .\"O .BR alphasort (): .\"O .br .PP \fBscandir\fP(), \fBalphasort\fP(): .br .\"O ---------------------------------------- .\"O .RS 4 .RS 4 .\"O ---------------------------------------- .\"O .PD 0 .\"O .ad b .\"O /* Since glibc 2.10: */ _POSIX_C_SOURCE\ >=\ 200809L .\"O || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .PD 0 .ad b /* glibc 2.10 以降: */ _POSIX_C_SOURCE\ >=\ 200809L || /* glibc 2.19 以前: */ _BSD_SOURCE || _SVID_SOURCE .\"O ---------------------------------------- .\"O .PD .PD .\"O ---------------------------------------- .\"O .RE .RE .\"O ---------------------------------------- .\"O .PP .\"O .BR versionsort (): .\"O _GNU_SOURCE .PP \fBversionsort\fP(): _GNU_SOURCE .\"O ---------------------------------------- .\"O .PP .\"O .BR scandirat (): .\"O _GNU_SOURCE .PP \fBscandirat\fP(): _GNU_SOURCE .\"O ---------------------------------------- .\"O .SH DESCRIPTION .\"O The .\"O .BR scandir () .\"O function scans the directory \fIdirp\fP, calling .\"O \fIfilter\fP() on each directory entry. .\"O Entries for which .\"O \fIfilter\fP() returns nonzero are stored in strings allocated via .\"O .BR malloc (3), .\"O sorted using .\"O .BR qsort (3) .\"O with the comparison .\"O function \fIcompar\fP(), and collected in array \fInamelist\fP .\"O which is allocated via .\"O .BR malloc (3). .\"O If \fIfilter\fP is NULL, all entries are selected. .SH 説明 関数 \fBscandir\fP() はディレクトリ \fIdirp\fP を走査し、 ディレクトリの各エントリーを引き数として \fIfilter\fP() を呼び出す。 \fIfilter\fP() が 0 以外の値を返すエントリーは、 \fBmalloc\fP(3) により確保された文字列に格納され、比較関数 \fIcompar\fP() を用いた \fBqsort\fP(3) によりソートされて、 \fBmalloc\fP(3) により確保された配列 \fInamelist\fP にまとめられる。 \fIfilter\fP が NULL ならば、すべてのエントリーが選択される。 .\"O ---------------------------------------- .\"O .PP .\"O The .\"O .BR alphasort () .\"O and .\"O .BR versionsort () .\"O functions can be used as the comparison function .\"O .IR compar (). .\"O The former sorts directory entries using .\"O .BR strcoll (3), .\"O the latter using .\"O .BR strverscmp (3) .\"O on the strings \fI(*a)\->d_name\fP and \fI(*b)\->d_name\fP. .PP 比較関数 \fIcompar\fP() には \fBalphasort\fP() 関数と \fBversionsort\fP() 関数を使用できる。 \fBalphasort\fP() は \fBstrcoll\fP(3) を用いてディレクトリエントリーをソートする。 \fBversionsort\fP() は文字列 \fI(*a)\->d_name\fP と \fI(*b)\->d_name\fP に対して \fBstrverscmp\fP(3) を用いる。 .\"O ---------------------------------------- .\"O .SS scandirat() .\"O The .\"O .BR scandirat () .\"O function operates in exactly the same way as .\"O .BR scandir (), .\"O except for the differences described here. .SS scandirat() \fBscandirat\fP() 関数は \fBscandir\fP() と全く同様の動作をする。ここでは差分を説明する。 .\"O ---------------------------------------- .\"O .PP .\"O If the pathname given in .\"O .I dirp .\"O is relative, then it is interpreted relative to the directory .\"O referred to by the file descriptor .\"O .I dirfd .\"O (rather than relative to the current working directory of .\"O the calling process, as is done by .\"O .BR scandir () .\"O for a relative pathname). .PP \fIdirp\fP で指定されたパス名が相対パスの場合、ファイルディスクリプター \fIdirfd\fP が参照するディレクトリからの相対パスと解釈される。 (一方、\fBscandir\fP() の場合は、相対パス名は、呼び出したプロセスのカレントワーキングディレクトリからの相対パスと解釈される。) .\"O ---------------------------------------- .\"O .PP .\"O If .\"O .I dirp .\"O is relative and .\"O .I dirfd .\"O is the special value .\"O .BR AT_FDCWD , .\"O then .\"O .I dirp .\"O is interpreted relative to the current working .\"O directory of the calling process (like .\"O .BR scandir ()). .PP \fIdirp\fP が相対パスで \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 \fIdirp\fP は (\fBscandir\fP() と同様に) 呼び出したプロセスのカレントワーキングディレクトリからの相対パスと解釈される。 .\"O ---------------------------------------- .\"O .PP .\"O If .\"O .I dirp .\"O is absolute, then .\"O .I dirfd .\"O is ignored. .PP \fIdirp\fP が絶対パスの場合、\fIdirfd\fP は無視される。 .\"O ---------------------------------------- .\"O .PP .\"O See .\"O .BR openat (2) .\"O for an explanation of the need for .\"O .BR scandirat (). .PP \fBscandirat\fP() が必要な理由については \fBopenat\fP(2) を参照のこと。 .\"O ---------------------------------------- .\"O .SH RETURN VALUE .\"O The .\"O .BR scandir () .\"O function returns the number of directory entries .\"O selected. .\"O On error, \-1 is returned, with .\"O .I errno .\"O set to indicate the cause of the error. .SH 返り値 \fBscandir\fP() 関数は、選択されたディレクトリのエントリー数を返す。 エラーの場合、 \-1 を返し、 \fIerrno\fP にエラーの原因を示す値を設定する。 .\"O ---------------------------------------- .\"O .PP .\"O The .\"O .BR alphasort () .\"O and .\"O .BR versionsort () .\"O functions return an integer less than, equal to, .\"O or greater than zero if the first argument is considered to be .\"O respectively less than, equal to, or greater than the second. .PP 関数 \fBalphasort\fP() と \fBversionsort\fP() は、 1 番目の引き数が 2 番目の引き数に対して [小さい/等しい/大きい] かに応じて、 0 より [小さい/等しい/大きい] 整数値を返す。 .\"O ---------------------------------------- .\"O .SH ERRORS .SH エラー .\"O ---------------------------------------- .\"O .TP .\"O .B ENOENT .\"O The path in \fIdirp\fR does not exist. .TP \fBENOENT\fP \fIdirp\fP で指定されたパスが存在しない。 .\"O ---------------------------------------- .\"O .TP .\"O .B ENOMEM .\"O Insufficient memory to complete the operation. .TP \fBENOMEM\fP 操作を完了するのに十分なメモリーがない。 .\"O ---------------------------------------- .\"O .TP .\"O .B ENOTDIR .\"O The path in \fIdirp\fR is not a directory. .TP \fBENOTDIR\fP \fIdirp\fP で指定されたパスがディレクトリではない。 .\"O ---------------------------------------- .\"O .PP .\"O The following additional errors can occur for .\"O .BR scandirat (): .PP \fBscandirat\fP() では、上記に加えて以下のエラーも発生する。 .\"O ---------------------------------------- .\"O .TP .\"O .B EBADF .\"O .I dirfd .\"O is not a valid file descriptor. .TP \fBEBADF\fP \fIdirfd\fP が有効なファイルディスクリプターではない。 .\"O ---------------------------------------- .\"O .TP .\"O .B ENOTDIR .\"O .I dirp .\"O is a relative path and .\"O .I dirfd .\"O is a file descriptor referring to a file other than a directory. .TP \fBENOTDIR\fP \fIdirp\fP が相対パスで、\fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプターである。 .\"O ---------------------------------------- .\"O .SH VERSIONS .\"O .BR versionsort () .\"O was added to glibc in version 2.1. .SH バージョン \fBversionsort\fP() は、glibc バージョン 2.1 で追加された。 .\"O ---------------------------------------- .\"O .PP .\"O .BR scandirat () .\"O was added to glibc in version 2.15. .PP \fBscandirat\fP() は glibc バージョン 2.15 で追加された。 .\"O ---------------------------------------- .\"O .SH ATTRIBUTES .\"O For an explanation of the terms used in this section, see .\"O .BR attributes (7). .\"O .TS .\"O allbox; .\"O lbw26 lb lb .\"O l l l. .\"O Interface Attribute Value .\"O T{ .\"O .BR scandir (), .\"O .BR scandirat () .\"O T} Thread safety MT-Safe .\"O T{ .\"O .BR alphasort (), .\"O .BR versionsort () .\"O T} Thread safety MT-Safe locale .\"O .TE .\"O .sp 1 .SH 属性 この節で使用されている用語の説明については、 \fBattributes\fP(7) を参照。 .TS allbox; lbw26 lb lb l l l. インターフェース 属性 値 T{ \fBscandir\fP(), \fBscandirat\fP() T} Thread safety MT\-Safe T{ \fBalphasort\fP(), \fBversionsort\fP() T} Thread safety MT\-Safe locale .TE .sp 1 .\"O ---------------------------------------- .\"O .SH CONFORMING TO .\"O .BR alphasort (), .\"O .BR scandir (): .\"O 4.3BSD, POSIX.1-2008. .SH 準拠 \fBalphasort\fP(), \fBscandir\fP(): 4.3BSD, POSIX.1\-2008. .\"O ---------------------------------------- .\"O .PP .\"O .BR versionsort () .\"O and .\"O .BR scandirat () .\"O are GNU extensions. .PP \fBversionsort\fP() と \fBscandirat\fP() は GNU 拡張である。 .\"O ---------------------------------------- .\"O .SH NOTES .\"O Since glibc 2.1, .\"O .BR alphasort () .\"O calls .\"O .BR strcoll (3); .\"O earlier it used .\"O .BR strcmp (3). .SH 注意 glibc 2.1 以降では \fBalphasort\fP() は \fBstrcoll\fP(3) を呼び出す。 \fBalphasort\fP() は以前は \fBstrcmp\fP(3) を使っていた。 .\"O ---------------------------------------- .\"O .PP .\"O Before glibc 2.10, the two arguments of .\"O .BR alphasort () .\"O and .\"O .BR versionsort () .\"O were typed as .\"O .IR "const void\ *" . .\"O When .\"O .BR alphasort () .\"O was standardized in POSIX.1-2008, .\"O the argument type was specified as the type-safe .\"O .IR "const struct dirent\ **", .\"O and glibc 2.10 changed the definition of .\"O .BR alphasort () .\"O (and the nonstandard .\"O .BR versionsort ()) .\"O to match the standard. .PP glibc 2.10 より前では、 \fBalphasort\fP() と \fBversionsort\fP() の 2 つの引き数の型は \fIconst void\ *\fP であった。 \fBalphasort\fP() が POSIX.1\-2008 で標準化された際、引き数の型は型安全な \fIconst struct dirent\ **\fP として規定され、 glibc 2.10 は \fBalphasort\fP() (と非標準の \fBversionsort\fP()) の定義を標準に合致するように変更した。 .\"O ---------------------------------------- .\"O .SH EXAMPLES .\"O The program below prints a list of the files in the current directory .\"O in reverse order. .SH 例 以下のプログラムは、現在のディレクトリ内のファイル一覧を逆順で表示する。 .\"O ---------------------------------------- .\"O .SS Program source .\"O \& .\"O .EX .\"O #define _DEFAULT_SOURCE .\"O #include <dirent.h> .\"O #include <stdio.h> .\"O #include <stdlib.h> .SS プログラムのソース \& .EX #define _DEFAULT_SOURCE #include <dirent.h> #include <stdio.h> #include <stdlib.h> .\"O ---------------------------------------- .\"O .\"O int .\"O main(void) .\"O { .\"O struct dirent **namelist; .\"O int n; int main(void) { struct dirent **namelist; int n; .\"O ---------------------------------------- .\"O .\"O n = scandir(".", &namelist, NULL, alphasort); .\"O if (n == -1) { .\"O perror("scandir"); .\"O exit(EXIT_FAILURE); .\"O } n = scandir(".", &namelist, NULL, alphasort); if (n == \-1) { perror("scandir"); exit(EXIT_FAILURE); } .\"O ---------------------------------------- .\"O .\"O while (n\-\-) { .\"O printf("%s\en", namelist[n]\->d_name); .\"O free(namelist[n]); .\"O } .\"O free(namelist); while (n\-\-) { printf("%s\en", namelist[n]\->d_name); free(namelist[n]); } free(namelist); .\"O ---------------------------------------- .\"O .\"O exit(EXIT_SUCCESS); .\"O } .\"O .EE exit(EXIT_SUCCESS); } .EE .\"O ---------------------------------------- .\"O .SH SEE ALSO .\"O .BR closedir (3), .\"O .BR fnmatch (3), .\"O .BR opendir (3), .\"O .BR readdir (3), .\"O .BR rewinddir (3), .\"O .BR seekdir (3), .\"O .BR strcmp (3), .\"O .BR strcoll (3), .\"O .BR strverscmp (3), .\"O .BR telldir (3) .SH 関連項目 \fBclosedir\fP(3), \fBfnmatch\fP(3), \fBopendir\fP(3), \fBreaddir\fP(3), \fBrewinddir\fP(3), \fBseekdir\fP(3), \fBstrcmp\fP(3), \fBstrcoll\fP(3), \fBstrverscmp\fP(3), \fBtelldir\fP(3) .\"O ---------------------------------------- .\"O .SH COLOPHON .\"O This page is part of release 5.10 of the Linux .\"O .I man-pages .\"O project. .\"O A description of the project, .\"O information about reporting bugs, .\"O and the latest version of this page, .\"O can be found at .\"O \%https://www.kernel.org/doc/man\-pages/. .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は \%https://www.kernel.org/doc/man\-pages/ に書かれている。 .\"O ----------------------------------------