総合手引 | セクション 2 | English | オプション |
#include <sys/types.h>
#include <dirent.h>
バッファ内のデータは dirent 構造体の連続で、それぞれ次のエントリが入っています:
u_int32_t d_fileno; u_int16_t d_reclen; u_int8_t d_type; u_int8_t d_namlen; char d_name[MAXNAMELEN + 1]; /* 下記を参照 */
d_fileno エントリは、ファイルシステム内の異なるファイル毎に一意の数値です。 ハードリンクでリンクされたファイル (link(2) を参照) は同じ d_fileno を持ちます。 d_reclen エントリは、ディレクトリレコードの長さ (バイト単位) です。 d_type エントリは、ディレクトリレコードが指すファイルのタイプです。 ファイルタイプの値は <sys/dirent.h> 内に定義されます。 d_name エントリにはヌル文字で終わるファイル名が入っています。 d_namlen エントリは、ヌルバイトを除いたファイル名の長さを示します。 それゆえ、 d_name の実際のサイズは 1 から MAXNAMELEN amp;+ 1 の間のいずれかの値になります。
エントリは余分のスペースで分離されているかもしれません。 d_reclen エントリは、 dirent 構造体の開始点から次の構造体がある場合は その構造体へのオフセットとして使用されます。
実際に転送されたバイト数が返されます。 fd に関連づけられた現在の位置を示すポインタは、 エントリの次のブロックに設定されます。 ポインタは getdirentries() または getdents() によって返されるバイト数分だけ進められるとは限りません。 ディレクトリの終わりに到達した場合は、値 0 が返されます。
getdirentries() システムコールは、読み取られたブロック位置を basep が指す場所に書き込みます。 代わりに lseek(2) によって現在の位置ポインタを設定、取得できます。 現在の位置ポインタは、 lseek(2) が返す値、 basep が指す場所に返される値 ((getdirentries) のみ)、または 0 のいずれかにのみ設定するべきです。
[EBADF] | |
fd 引数が読取り用に開かれた有効なファイル記述子ではありません。 | |
[EFAULT] | |
buf または basep のどちらかが、割り当てられたアドレス空間の範囲外を指しています。 | |
[EINVAL] | |
fd によって参照されるファイルがディレクトリでないか、 nbytes がディレクトリエントリまたはエントリのブロックを返すのには小さすぎます。 あるいは、現在の位置ポインタが無効です。 | |
[EIO] | ファイルシステムに読み書きしている間に I/O (入出力)エラーが発生しました。 |
GETDIRENTRIES (2) | May 3, 1995 |
総合手引 | セクション 2 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.