other versions
other languages
other sections
READDIR(3) | Linux Programmer's Manual | READDIR(3) |
名前¶
readdir, readdir_r - ディレクトリを読み込む書式¶
#include <dirent.h>struct dirent *readdir(DIR *dirp);int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
_POSIX_C_SOURCE >= 1 ||
_XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE || _POSIX_SOURCE
説明¶
readdir() 関数は、dirp が指すディレクトリストリームの中で、 次のディレクトリエントリを表す 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]; /* ファイル名 */ };
dirent 構造体のフィールドで POSIX.1 で要求されているのは、 d_name[] と (XSI 拡張での) d_ino だけである。 d_name[] はその大きさも規定されておらず、 このフィールドには最大で NAME_MAX 個の文字と、それに続く終端の NULL バイトが格納される。 他のフィールドは非標準であり、全てのシステムに存在するわけではない。 詳細については、下記の「注意」を参照のこと。 readdir() によって返されるデータは、それ以降の同じストリームに対する readdir() の呼び出しによって上書きされる可能性がある。
返り値¶
成功すると、 readdir() は dirent 構造体へのポインタを返す。 (この構造体は静的に割り当てられているかもしれない。 このポインタを free(3) しようとしないこと。) ディレクトリストリームの末尾に達した場合には、NULL が返され、 errno は変化しない。 エラーが発生した場合、NULL が返され、 errno が適切に設定される。エラー¶
- EBADF
- ディレクトリストリームディスクリプタ dirp が無効である。
準拠¶
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 が定義されているかをテストすればよい。- DT_BLK
- ブロックデバイスである。
- DT_CHR
- キャラクタデバイスである。
- DT_DIR
- ディレクトリである。
- DT_FIFO
- 名前付きパイプ (FIFO) である。
- DT_LNK
- シンボリックリンクである。
- DT_REG
- 通常のファイルである。
- DT_SOCK
- UNIX ドメインソケットである。
- DT_UNKNOWN
- ファイルタイプが不明である。
len = offsetof(struct dirent, d_name) + pathconf(dirpath, _PC_NAME_MAX) + 1 entryp = malloc(len);
(POSIX.1 では struct dirent の最後のフィールドが d_name であることを要求している。)
関連項目¶
getdents(2), read(2), closedir(3), dirfd(3), ftw(3), offsetof(3), opendir(3), rewinddir(3), scandir(3), seekdir(3), telldir(3)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2010-09-10 |