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_named_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_typeDT_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