.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk)
.\"
+.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
.\"
.\" References consulted:
.\" Linux libc source code
.\" Rework discussion of nonstandard structure fields.
.\" 2008-09-11, mtk, Document readdir_r().
.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\"
.\" Japanese Version Copyright (c) 1997 HIROFUMI Nishizuka
.\" all rights reserved.
.\" Translated 1997-12-24, HIROFUMI Nishizuka <nishi@rpts.cl.nec.co.jp>
.\" Updated & Modified 2005-01-16, Yuichi SATO <ysato444@yahoo.co.jp>
.\" Updated & Modified 2005-09-06, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
.\" Updated 2008-08-11, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.05
+.\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-07-22, Akihiro MOTOKI <amotoki@gmail.com>
.\"
-.TH READDIR 3 2010-09-10 "" "Linux Programmer's Manual"
+.TH READDIR 3 2013\-06\-21 "" "Linux Programmer's Manual"
.SH 名前
readdir, readdir_r \- ディレクトリを読み込む
.SH 書式
.nf
-.B #include <dirent.h>
+\fB#include <dirent.h>\fP
.sp
-.BI "struct dirent *readdir(DIR *" dirp );
+\fBstruct dirent *readdir(DIR *\fP\fIdirp\fP\fB);\fP
.sp
-.BI "int readdir_r(DIR *" dirp ", struct dirent *" entry \
-", struct dirent **" result );
+\fBint readdir_r(DIR *\fP\fIdirp\fP\fB, struct dirent *\fP\fIentry\fP\fB, struct dirent **\fP\fIresult\fP\fB);\fP
.fi
.sp
.in -4n
-glibc 向けの機能検査マクロの要件
-.RB ( feature_test_macros (7)
-参照):
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照):
.ad l
.in
.sp
-.BR readdir_r ():
+\fBreaddir_r\fP():
.RS 4
-_POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _BSD_SOURCE ||
-_SVID_SOURCE || _POSIX_SOURCE
+_POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE
+|| _POSIX_SOURCE
.RE
.ad b
.SH 説明
-.BR readdir ()
-関数は、\fIdirp\fP が指すディレクトリストリームの中で、
-次のディレクトリエントリを表す \fIdirent\fP 構造体へのポインタを返す。
-ディレクトリストリームの末尾に達した場合や、
-エラーが発生した場合は、 NULL を返す。
+\fBreaddir\fP() 関数は、\fIdirp\fP が指すディレクトリストリームの中で、 次のディレクトリエントリを表す \fIdirent\fP
+構造体へのポインタを返す。 ディレクトリストリームの末尾に達した場合や、 エラーが発生した場合は、 NULL を返す。
.PP
-Linux では
-.I dirent
-構造体は以下のように定義されている。
+Linux では \fIdirent\fP 構造体は以下のように定義されている。
.PP
.in +4n
.nf
struct dirent {
ino_t d_ino; /* inode 番号 */
- off_t d_off; /* 次の dirent へのオフセット */
+ off_t d_off; /* オフセットではない; 注意を参照 */
unsigned short d_reclen; /* このレコードの長さ */
unsigned char d_type; /* ファイル種別。全ファイルシステム */
でサポートされているわけではない */
.fi
.in
.PP
-.I dirent
-構造体のフィールドで POSIX.1 で要求されているのは、
-.IR d_name []
-と (XSI 拡張での)
-.I d_ino
-だけである。
-.IR d_name []
-はその大きさも規定されておらず、
-このフィールドには最大で
-.B NAME_MAX
-個の文字と、それに続く終端の NULL バイトが格納される。
-他のフィールドは非標準であり、全てのシステムに存在するわけではない。
+\fIdirent\fP 構造体のフィールドで POSIX.1 で要求されているのは、 \fId_name\fP[] と (XSI 拡張での) \fId_ino\fP
+だけである。 \fId_name\fP[] はその大きさも規定されておらず、 このフィールドには最大で \fBNAME_MAX\fP 個の文字と、それに続く終端の
+NULL バイト (\(aq\e0\(aq)が格納される。 他のフィールドは非標準であり、全てのシステムに存在するわけではない。
詳細については、下記の「注意」を参照のこと。
.PP
-.BR readdir ()
-によって返されるデータは、それ以降の同じストリームに対する
-.BR readdir ()
+\fBreaddir\fP() によって返されるデータは、それ以降の同じストリームに対する \fBreaddir\fP()
の呼び出しによって上書きされる可能性がある。
-.BR readdir_r ()
-関数は
-.BR readdir ()
-のリエントラント版である。
-この関数はディレクトリストリーム
-.I dirp
-から次のディレクトリエントリを読み込み、
-.I entry
-が指す呼び出し元が割り当てたバッファにそのエントリを格納して返す
-(このバッファの割り当てについては「注意」の節を参照のこと)。
-返されるエントリへのポインタが
-.I *result
-に格納される。ディレクトリストリームの末尾に達した場合は、
-NULL が
-.I *result
-に格納される。
+\fBreaddir_r\fP() 関数は \fBreaddir\fP() のリエントラント版である。 この関数はディレクトリストリーム \fIdirp\fP
+から次のディレクトリエントリを読み込み、 \fIentry\fP が指す呼び出し元が割り当てたバッファにそのエントリを格納して返す
+(このバッファの割り当てについては「注意」の節を参照のこと)。 返されるエントリへのポインタが \fI*result\fP
+に格納される。ディレクトリストリームの末尾に達した場合は、 NULL が \fI*result\fP に格納される。
.SH 返り値
-成功すると、
-.BR readdir ()
-は
-.I dirent
-構造体へのポインタを返す。
-(この構造体は静的に割り当てられているかもしれない。
-このポインタを
-.BR free (3)
-しようとしないこと。)
-ディレクトリストリームの末尾に達した場合には、NULL が返され、
-.I errno
-は変化しない。
-エラーが発生した場合、NULL が返され、
-.I errno
-が適切に設定される。
+成功すると、 \fBreaddir\fP() は \fIdirent\fP 構造体へのポインタを返す。 (この構造体は静的に割り当てられているかもしれない。
+このポインタを \fBfree\fP(3) しようとしないこと。) ディレクトリストリームの末尾に達した場合には、NULL が返され、 \fIerrno\fP
+は変化しない。 エラーが発生した場合、NULL が返され、 \fIerrno\fP が適切に設定される。
-成功すると、
-.BR readdir_r ()
-関数は 0 を返す。
-エラーの場合、(「エラー」の節のリストに載っている) 正のエラー番号を返す。
-ディレクトリストリームの末尾に達した場合、
-.BR readdir_r ()
-は返り値として 0 を返し、
-.I *result
-に NULL を格納する。
+成功すると、 \fBreaddir_r\fP() 関数は 0 を返す。 エラーの場合、(「エラー」の節のリストに載っている) 正のエラー番号を返す。
+ディレクトリストリームの末尾に達した場合、 \fBreaddir_r\fP() は返り値として 0 を返し、 \fI*result\fP に NULL
+を格納する。
.SH エラー
-.TP
-.B EBADF
-ディレクトリストリームディスクリプタ \fIdirp\fP が無効。
+.TP
+\fBEBADF\fP
+ディレクトリストリームディスクリプタ \fIdirp\fP が無効である。
+.SH 属性
+.SS "マルチスレッディング (pthreads(7) 参照)"
+\fBreaddir\fP() 関数はスレッドセーフではない。
+.LP
+\fBreaddir_r\fP() 関数はスレッドセーフである。
.SH 準拠
-SVr4, 4.3BSD, POSIX.1-2001.
+SVr4, 4.3BSD, POSIX.1\-2001.
.SH 注意
-フィールド
-.I d_name
-と
-.I d_ino
-だけが POSIX.1-2001 で規定されている。
-残りのフィールドは多くのシステムに存在するが、全てのシステムに
-存在するわけではない。
-glibc では、プログラムが POSIX.1 で定義されていないフィールドが
-利用できるかをチェックすることができる。
-チェックするには、マクロ
-.BR _DIRENT_HAVE_D_NAMLEN ,
-.BR _DIRENT_HAVE_D_RECLEN ,
-.BR _DIRENT_HAVE_D_OFF ,
-.B _DIRENT_HAVE_D_TYPE
+フィールド \fId_name\fP と \fId_ino\fP だけが POSIX.1\-2001 で規定されている。
+残りのフィールドは多くのシステムに存在するが、全てのシステムに 存在するわけではない。 glibc では、プログラムが POSIX.1
+で定義されていないフィールドが 利用できるかをチェックすることができる。 チェックするには、マクロ \fB_DIRENT_HAVE_D_NAMLEN\fP,
+\fB_DIRENT_HAVE_D_RECLEN\fP, \fB_DIRENT_HAVE_D_OFF\fP, \fB_DIRENT_HAVE_D_TYPE\fP
が定義されているかをテストすればよい。
-.I d_type
-フィールドは、Linux 以外では、
-主に BSD 系のシステムにだけ存在する。
-このフィールドを使うと、
-その後の動作がファイルの種別により決まる場合に、
-.BR lstat (2)
-を呼び出すコストを避けることができる。
-機能検査マクロ
-.B _BSD_SOURCE
-が定義された場合、glibc は
-.I d_type
-で返される値として以下のマクロ定数を定義する。
-.TP 12
-.B DT_BLK
-ブロック・デバイスである。
-.TP
-.B DT_CHR
-キャラクタ・デバイスである。
-.TP
-.B DT_DIR
+.\" https://lwn.net/Articles/544298/
+\fId_off\fP で返される値は \fBtelldir\fP(3) が返す値と同じで、ディレクトリストリーム内の現在の位置を示す。
+フィールドの型や名前はこうなっていますが、最近のファイルシステムでは \fId_off\fP
+フィールドが何らかのディレクトリオフセットであることはめったいにない。アプリケーションプログラムでは、必ずこの値を内容を意識せず単なる値として扱うべきであり、その内容について前提を持つべきではない。
+
+\fId_type\fP フィールドは、Linux 以外では、 主に BSD 系のシステムにだけ存在する。 このフィールドを使うと、
+その後の動作がファイルの種別により決まる場合に、 \fBlstat\fP(2) を呼び出すコストを避けることができる。 機能検査マクロ
+\fB_BSD_SOURCE\fP が定義された場合、glibc は \fId_type\fP で返される値として以下のマクロ定数を定義する。
+.TP 12
+\fBDT_BLK\fP
+ブロックデバイスである。
+.TP
+\fBDT_CHR\fP
+キャラクタデバイスである。
+.TP
+\fBDT_DIR\fP
ディレクトリである。
-.TP
-.B DT_FIFO
+.TP
+\fBDT_FIFO\fP
名前付きパイプ (FIFO) である。
-.TP
-.B DT_LNK
-ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81§ã\81\82ã\82\8bã\80\82
-.TP
-.B DT_REG
+.TP
+\fBDT_LNK\fP
+シンボリックリンクである。
+.TP
+\fBDT_REG\fP
通常のファイルである。
-.TP
-.B DT_SOCK
+.TP
+\fBDT_SOCK\fP
UNIX ドメインソケットである。
-.TP
-.B DT_UNKNOWN
-ファイルタイプが不明である。
+.TP
+\fBDT_UNKNOWN\fP
.\" The glibc manual says that on some systems this is the only
.\" value returned
+ファイルタイプが不明である。
.PP
-ファイル種別を決定できなかった場合には、
-.I d_type
-に
-.B DT_UNKNOWN
-が入る。
+ファイル種別を決定できなかった場合には、 \fId_type\fP に \fBDT_UNKNOWN\fP が入る。
-現在のところ、
-.\" カーネル 2.6.27
-.\" 同じ説明文が readdir.2 にもある。
-.I d_type
-でファイルタイプを返す機能が完全にサポートされているのは、
-いくつかのファイルシステムにおいてのみである
-(Btrfs, ext2, ext3, ext4 はサポートしている)。
-どのアプリケーションも、
-.B DT_UNKNOWN
+.\" kernel 2.6.27
+.\" The same sentence is in getdents.2
+現在のところ、 \fId_type\fP でファイルタイプを返す機能が完全にサポートされているのは、 いくつかのファイルシステムにおいてのみである
+(Btrfs, ext2, ext3, ext4 はサポートしている)。 どのアプリケーションも、 \fBDT_UNKNOWN\fP
が返された際に適切に処理できなければならない。
-POSIX.1 では
-.I d_name
-フィールドのサイズは規定されておらず、
-.I dirent
-構造体の
-.I d_name
-の後ろに他の非標準のフィールドがあるかもしれないので、
-移植性が必要なアプリケーションで
-.BR readdir_r ()
-を使う場合は
-.I entry
+POSIX.1 では \fId_name\fP フィールドのサイズは規定されておらず、 \fIdirent\fP 構造体の \fId_name\fP
+の後ろに他の非標準のフィールドがあるかもしれないので、 移植性が必要なアプリケーションで \fBreaddir_r\fP() を使う場合は \fIentry\fP
に渡すバッファを次のようにして割り当てるべきである。
.in +4n
.nf
-len = offsetof(struct dirent, d_name) +
- pathconf(dirpath, _PC_NAME_MAX) + 1
+name_max = pathconf(dirpath, _PC_NAME_MAX);
+if (name_max == \-1) /* 上限が定義されていない、またはエラー */
+ name_max = 255; /* 適当な値を入れる */
+len = offsetof(struct dirent, d_name) + name_max + 1;
entryp = malloc(len);
.fi
.in
-(POSIX.1 では
-.I "struct dirent"
-の最後のフィールドが
-.I d_name
-であることを要求している。)
+(POSIX.1 では \fIstruct dirent\fP の最後のフィールドが \fId_name\fP であることを要求している。)
.SH 関連項目
-.BR getdents (2),
-.BR read (2),
-.BR closedir (3),
-.BR dirfd (3),
-.BR ftw (3),
-.BR offsetof (3),
-.BR opendir (3),
-.BR rewinddir (3),
-.BR scandir (3),
-.BR seekdir (3),
-.BR telldir (3)
+\fBgetdents\fP(2), \fBread\fP(2), \fBclosedir\fP(3), \fBdirfd\fP(3), \fBftw\fP(3),
+\fBoffsetof\fP(3), \fBopendir\fP(3), \fBrewinddir\fP(3), \fBscandir\fP(3),
+\fBseekdir\fP(3), \fBtelldir\fP(3)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。