OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / release / man3 / readdir.3
index 0c622bf..8110d72 100644 (file)
@@ -1,5 +1,6 @@
 .\" 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.
@@ -19,6 +20,7 @@
 .\"
 .\" 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
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH READDIR 3 2010\-09\-10 "" "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1997 HIROFUMI Nishizuka
+.\"    all rights reserved.
+.\" Translated 1997-12-24, HIROFUMI Nishizuka <nishi@rpts.cl.nec.co.jp>
+.\" Updated & Modified 2002-03-24, Yuichi SATO <ysato@h4.dion.ne.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 2013\-06\-21 "" "Linux Programmer's Manual"
 .SH 名前
 readdir, readdir_r \- ディレクトリを読み込む
 .SH 書式
@@ -60,8 +74,8 @@ _POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE
 .RE
 .ad b
 .SH 説明
-\fBreaddir\fP()  関数は、\fIdirp\fP が指すディレクトリストリームの中で、 次のディレクトリエントリを表す \fIdirent\fP
-構造体へのポインタを返す。 ディレクトリストリームの末尾に達した場合や、 エラーが発生した場合は、 NULL を返す。
+\fBreaddir\fP()  é\96¢æ\95°ã\81¯ã\80\81\fIdirp\fP ã\81\8cæ\8c\87ã\81\99ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82¹ã\83\88ã\83ªã\83¼ã\83 ã\81®ä¸­ã\81§ã\80\81 æ¬¡ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\82\92表ã\81\99 \fIdirent\fP
+æ§\8bé\80 ä½\93ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92è¿\94ã\81\99ã\80\82 ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82¹ã\83\88ã\83ªã\83¼ã\83 ã\81®æ\9c«å°¾ã\81«é\81\94ã\81\97ã\81\9få ´å\90\88ã\82\84ã\80\81 ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81 NULL ã\82\92è¿\94ã\81\99ã\80\82
 .PP
 Linux では \fIdirent\fP 構造体は以下のように定義されている。
 .PP
@@ -69,7 +83,7 @@ Linux では \fIdirent\fP 構造体は以下のように定義されている。
 .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;      /* ファイル種別。全ファイルシステム */
                                    でサポートされているわけではない */
@@ -80,18 +94,19 @@ struct dirent {
 .PP
 \fIdirent\fP 構造体のフィールドで POSIX.1 で要求されているのは、 \fId_name\fP[] と (XSI 拡張での)  \fId_ino\fP
 だけである。 \fId_name\fP[] はその大きさも規定されておらず、 このフィールドには最大で \fBNAME_MAX\fP 個の文字と、それに続く終端の
-NULL バイトが格納される。 他のフィールドは非標準であり、全てのシステムに存在するわけではない。 詳細については、下記の「注意」を参照のこと。
+ヌルバイト (\(aq\e0\(aq)が格納される。 他のフィールドは非標準であり、全てのシステムに存在するわけではない。
+詳細については、下記の「注意」を参照のこと。
 .PP
 \fBreaddir\fP()  によって返されるデータは、それ以降の同じストリームに対する \fBreaddir\fP()
 の呼び出しによって上書きされる可能性がある。
 
 \fBreaddir_r\fP()  関数は \fBreaddir\fP()  のリエントラント版である。 この関数はディレクトリストリーム \fIdirp\fP
\81\8bã\82\89次ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82¨ã\83³ã\83\88ã\83ªã\82\92読ã\81¿è¾¼ã\81¿ã\80\81 \fIentry\fP ã\81\8cæ\8c\87ã\81\99å\91¼ã\81³å\87ºã\81\97å\85\83ã\81\8cå\89²ã\82\8aå½\93ã\81¦ã\81\9fã\83\90ã\83\83ã\83\95ã\82¡ã\81«ã\81\9dã\81®ã\82¨ã\83³ã\83\88ã\83ªを格納して返す
-(ã\81\93ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\81®å\89²ã\82\8aå½\93ã\81¦ã\81«ã\81¤ã\81\84ã\81¦ã\81¯ã\80\8c注æ\84\8fã\80\8dã\81®ç¯\80ã\82\92å\8f\82ç\85§ã\81®ã\81\93ã\81¨)ã\80\82 è¿\94ã\81\95ã\82\8cã\82\8bã\82¨ã\83³ã\83\88ã\83ªã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿が \fI*result\fP
\81\8bã\82\89次ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\82\92読ã\81¿è¾¼ã\81¿ã\80\81 \fIentry\fP ã\81\8cæ\8c\87ã\81\99å\91¼ã\81³å\87ºã\81\97å\85\83ã\81\8cå\89²ã\82\8aå½\93ã\81¦ã\81\9fã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81«ã\81\9dã\81®ã\82¨ã\83³ã\83\88ã\83ªã\83¼を格納して返す
+(ã\81\93ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81®å\89²ã\82\8aå½\93ã\81¦ã\81«ã\81¤ã\81\84ã\81¦ã\81¯ã\80\8c注æ\84\8fã\80\8dã\81®ç¯\80ã\82\92å\8f\82ç\85§ã\81®ã\81\93ã\81¨)ã\80\82 è¿\94ã\81\95ã\82\8cã\82\8bã\82¨ã\83³ã\83\88ã\83ªã\83¼ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼が \fI*result\fP
 に格納される。ディレクトリストリームの末尾に達した場合は、 NULL が \fI*result\fP に格納される。
 .SH 返り値
-成功すると、 \fBreaddir\fP()  は \fIdirent\fP 構造体へのポインタを返す。 (この構造体は静的に割り当てられているかもしれない。
-このポインタを \fBfree\fP(3)  しようとしないこと。)  ディレクトリストリームの末尾に達した場合には、NULL が返され、 \fIerrno\fP
\88\90å\8a\9fã\81\99ã\82\8bã\81¨ã\80\81 \fBreaddir\fP()  ã\81¯ \fIdirent\fP æ§\8bé\80 ä½\93ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92è¿\94ã\81\99ã\80\82 (ã\81\93ã\81®æ§\8bé\80 ä½\93ã\81¯é\9d\99ç\9a\84ã\81«å\89²ã\82\8aå½\93ã\81¦ã\82\89ã\82\8cã\81¦ã\81\84ã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81ªã\81\84ã\80\82
\81\93ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92 \fBfree\fP(3)  ã\81\97ã\82\88ã\81\86ã\81¨ã\81\97ã\81ªã\81\84ã\81\93ã\81¨ã\80\82)  ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82¹ã\83\88ã\83ªã\83¼ã\83 ã\81®æ\9c«å°¾ã\81«é\81\94ã\81\97ã\81\9få ´å\90\88ã\81«ã\81¯ã\80\81NULL ã\81\8cè¿\94ã\81\95ã\82\8cã\80\81 \fIerrno\fP
 は変化しない。 エラーが発生した場合、NULL が返され、 \fIerrno\fP が適切に設定される。
 
 成功すると、 \fBreaddir_r\fP()  関数は 0 を返す。 エラーの場合、(「エラー」の節のリストに載っている) 正のエラー番号を返す。
@@ -100,7 +115,12 @@ NULL バイトが格納される。 他のフィールドは非標準であり
 .SH エラー
 .TP 
 \fBEBADF\fP
-ディレクトリストリームディスクリプタ \fIdirp\fP が無効である。
+ディレクトリストリームディスクリプター \fIdirp\fP が無効である。
+.SH 属性
+.SS "マルチスレッディング (pthreads(7) 参照)"
+\fBreaddir\fP() 関数はスレッドセーフではない。
+.LP
+\fBreaddir_r\fP() 関数はスレッドセーフである。
 .SH 準拠
 SVr4, 4.3BSD, POSIX.1\-2001.
 .SH 注意
@@ -110,6 +130,11 @@ SVr4, 4.3BSD, POSIX.1\-2001.
 \fB_DIRENT_HAVE_D_RECLEN\fP, \fB_DIRENT_HAVE_D_OFF\fP, \fB_DIRENT_HAVE_D_TYPE\fP
 が定義されているかをテストすればよい。
 
+.\" 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 で返される値として以下のマクロ定数を定義する。
@@ -118,7 +143,7 @@ SVr4, 4.3BSD, POSIX.1\-2001.
 ブロックデバイスである。
 .TP 
 \fBDT_CHR\fP
-キャラクタデバイスである。
\82­ã\83£ã\83©ã\82¯ã\82¿ã\83¼ã\83\87ã\83\90ã\82¤ã\82¹ã\81§ã\81\82ã\82\8bã\80\82
 .TP 
 \fBDT_DIR\fP
 ディレクトリである。
@@ -150,12 +175,14 @@ UNIX ドメインソケットである。
 
 POSIX.1 では \fId_name\fP フィールドのサイズは規定されておらず、 \fIdirent\fP 構造体の \fId_name\fP
 の後ろに他の非標準のフィールドがあるかもしれないので、 移植性が必要なアプリケーションで \fBreaddir_r\fP()  を使う場合は \fIentry\fP
-に渡すバッファを次のようにして割り当てるべきである。
\81«æ¸¡ã\81\99ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\82\92次ã\81®ã\82\88ã\81\86ã\81«ã\81\97ã\81¦å\89²ã\82\8aå½\93ã\81¦ã\82\8bã\81¹ã\81\8dã\81§ã\81\82ã\82\8bã\80\82
 .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
@@ -166,6 +193,6 @@ entryp = malloc(len);
 \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.41 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。