GETDIRENTRIES
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
getdirentries
getdents
- ファイルシステムに独立なフォーマットのディレクトリエントリを取得する
索引
ライブラリ
Lb libc
索引
書式
In sys/types.h
In dirent.h
Ft int
Fn getdirentries int fd char *buf int nbytes long *basep
Ft int
Fn getdents int fd char *buf int nbytes
索引
解説
Fn getdirentries
システムコールと
Fn getdents
システムコールは、ファイル記述子
Fa fd
が参照するディレクトリから
Fa buf
が指すバッファ内に、ファイルシステムに独立なフォーマットの
ディレクトリエントリを読み取ります。
最高で
Fa nbytes
までのデータが転送されます。
Fa nbytes
引数は、ファイルに対応するブロックサイズ以上である必要があります。
stat(2)
を参照してください。
このサイズより小さいバッファでは、
これらのシステムコールをサポートしない可能性のあるファイルシステムがあります。
バッファ内のデータは
Vt 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]; /* 下記を参照 */
Fa d_fileno
エントリは、ファイルシステム内の異なるファイル毎に一意の数値です。
ハードリンクでリンクされたファイル
( link(2)
を参照) は同じ
Fa d_fileno
を持ちます。
Fa d_reclen
エントリは、ディレクトリレコードの長さ (バイト単位) です。
Fa d_type
エントリは、ディレクトリレコードが指すファイルのタイプです。
ファイルタイプの値は
Fa <sys/dirent.h>
内に定義されます。
Fa d_name
エントリにはヌル文字で終わるファイル名が入っています。
Fa d_namlen
エントリは、ヌルバイトを除いたファイル名の長さを示します。
それゆえ、
Fa d_name
の実際のサイズは 1 から
MAXNAMELEN
+ 1
の間のいずれかの値になります。
エントリは余分のスペースで分離されているかもしれません。
Fa d_reclen
エントリは、
Fa dirent
構造体の開始点から次の構造体がある場合は
その構造体へのオフセットとして使用されます。
実際に転送されたバイト数が返されます。
Fa fd
に関連づけられた現在の位置を示すポインタは、
エントリの次のブロックに設定されます。
ポインタは
Fn getdirentries
または
Fn getdents
によって返されるバイト数分だけ進められるとは限りません。
ディレクトリの終わりに到達した場合は、値 0 が返されます。
Fn getdirentries
システムコールは、読み取られたブロック位置を
Fa basep
が指す場所に書き込みます。
代わりに
lseek(2)
によって現在の位置ポインタを設定、取得できます。
現在の位置ポインタは、
lseek(2)
が返す値、
Fa basep
が指す場所に返される値
Fn ( getdirentries
のみ)、または 0 のいずれかにのみ設定するべきです。
索引
戻り値
処理が正常に完了すると、実際に転送されたバイト数が返されます。
そうでない場合は -1 が返され、エラーを示すためにグローバル変数
errno
が設定されます。
索引
エラー
Fn getdirentries
システムコールは次の場合に失敗します:
- Bq Er EBADF
-
Fa fd
引数が読取り用に開かれた有効なファイル記述子ではありません。
- Bq Er EFAULT
-
Fa buf
または
Fa basep
のどちらかが、割り当てられたアドレス空間の範囲外を指しています。
- Bq Er EINVAL
-
Fa fd
によって参照されるファイルがディレクトリでないか、
Fa nbytes
がディレクトリエントリまたはエントリのブロックを返すのには小さすぎます。
あるいは、現在の位置ポインタが無効です。
- Bq Er EIO
-
ファイルシステムに読み書きしている間に
I/O
(入出力)エラーが発生しました。
索引
関連項目
lseek(2),
open(2)
索引
歴史
Fn getdirentries
システムコールは
BSD 4.4
ではじめて登場しました。
Fn getdents
システムコールは
Fx 3.0
ではじめて登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- 歴史
-
Time: 07:06:26 GMT, January 12, 2009