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

名称
ライブラリ
書式
解説
戻り値
エラー
関連項目
歴史

jman



Time: 07:06:26 GMT, January 12, 2009