READDIR
Section: Linux Programmer's Manual (3)
Updated: 2007-07-30
Index
JM Home Page
roff page
名前
readdir - ディレクトリを読み込む
書式
#include <sys/types.h>
#include <dirent.h>
struct dirent *readdir(DIR *dir);
説明
readdir()
関数は、dir の指すディレクトリストリームの中で、
次のディレクトリエントリを表す dirent 構造体へのポインタを返す。
ファイルの最後に達した場合やエラーが発生した場合は NULL を返す。
Linux では
dirent
構造体は以下のように定義されている:
-
struct dirent {
ino_t d_ino; /* inode 番号 */
off_t d_off; /* 次の dirent へのオフセット */
unsigned short d_reclen; /* このレコードの長さ */
unsigned char d_type; /* ファイル種別 */
char d_name[256]; /* ファイル名 */
};
POSIX によると、
dirent
構造体にはサイズの明示されていない
char d_name[]
フィールドが含まれる。このフィールドには最大で
NAME_MAX
文字と、それに続く終端の NULL バイトが格納される。
POSIX.1-2001 では XSI 拡張として
ino_t d_ino
フィールドについても記述している。
他のフィールドは非標準であり、全てのシステムに存在するわけではない。
詳細については、下記の「注意」を参照のこと。
readdir()
によって返されるデータは、以降の同じストリームに対する
readdir()
の呼び出しによって上書きされる可能性がある。
返り値
readdir()
関数は
dirent
構造体へのポインタを返す。
エラーが発生するか、ファイルの最後に達した場合は NULL を返す。
エラーの場合、
errno
が適切に設定される。
エラー
- EBADF
-
ディレクトリストリームディスクリプタ dir が無効。
準拠
SVr4, 4.3BSD, POSIX.1-2001
注意
フィールド
d_name
と
d_ino
だけが POSIX.1-2001 に規定されている。
残りのフィールドは多くのシステムに存在するが、全てのシステムに
存在するわけではない。
glibc では、プログラムが POSIX.1 で定義されていないフィールドが
利用できるかをチェックすることができる。
チェックするには、マクロ
_DIRENT_HAVE_D_NAMLEN,
_DIRENT_HAVE_D_RECLEN,
_DIRENT_HAVE_D_OFF,
_DIRENT_HAVE_D_TYPE
が定義されているかをテストすればよい。
Linux 以外では、
d_type
フィールドは主に BSD 系のシステムでだけ存在する。
このフィールドがあると、
その後の動作がファイルの種別により決まる場合に、
stat()
を呼び出すコストを避けることができる。
機能検査マクロ
_BSD_SOURCE
が定義された場合、glibc は
d_type
で返される値として以下のマクロ定数を定義する。
- DT_UNKNOWN
-
ファイルタイプが不明である。
- DT_REG
-
通常のファイルである。
- DT_DIR
-
ディレクトリである。
- DT_FIFO
-
名前付きパイプ、すなわち FIFO である。
- DT_SOCK
-
Unix ドメインソケットである。
- DT_CHR
-
キャラクタ・デバイスである。
- DT_BLK
-
ブロック・デバイスである。
ファイル種別を決定できなかった場合には、
d_type
に
DT_UNKNOWN
が入る。
関連項目
read(2),
closedir(3),
dirfd(3),
ftw(3),
opendir(3),
rewinddir(3),
scandir(3),
seekdir(3),
telldir(3),
feature_test_macros(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:58 GMT, November 19, 2007