GETDIRENTRIES(2) — NEWS-OS Programmer’s Manual
名称
getdirentries − ディレクトリエントリをファイルシステムに依存しないフォーマットで取り出す
形式
int getdirentries(fd, buf, nbytes, basep)
int fd;
char ∗buf;
int nbytes;
long ∗basep
解説
このシステムコールは、現在余り使われてはいません。 代わりに、 <sys/dirent.h> に指定されている新しいフォーマットでディレクトリエントリを 返す getdents(2) をご使用ください。 <sys/dir.h> ファイルも、新しいディレクトリエントリ フォーマットを使用するように変更されました。 現在 getdirentries() を呼ぶプログラムは、新しいシステムコールと 新しいインクルードファイル <sys/dirent.h> を使用するよう変更、または できれば directory(3) ライブラリルーチンを使用するよう変更する必要があります。 getdirentries() システムコールは、バックワードにバイナリの互換性を保つため 現在 NEWS-OS の リリースに含まれていますが、 整数値の代わるリリース時に取り除かれます。 getdirentries() は、 ディレクトリエントリをファイルディスクリプタ fd が参照するディレクトリから、 buf が指すバッファへ、 ファイルシステムに依存しないフォーマットでコピーします。 nbytes までのデータが転送されます。 nbytes は、 そのファイルのブロックサイズ ( stat(2) 参照) 以上でなければなりません。 それより小さなサイズにすると、 ファイルシステムによってはエラーが発生します。 バッファ内のデータは、 一連の dirent 構造体で、 各構造体には次のエントリが収められています。
unsigned longd_fileno;
unsigned shortd_reclen;
unsigned shortd_namlen;
char d_name[MAXNAMELEN + 1]; /∗ 下記参照 ∗/
d_fileno エントリは、 ファイルシステム内にある各ファイルに固有の番号です。 ハードリンクを 用いてリンクされているファイル ( link(2) 参照) は、 同じ d_fileno になります。 d_reclen エントリは、 ディレクトリレコードの長さ (バイト) です。 d_name エントリには、 ナルで終っているファイル名が収められます。 d_namlen エントリは、 そのファイル名の長さを 示します。 したがって、 d_name の実際のサイズは、 2 から MAXNAMELEN + 1 までとなります。 構造体は、 必ずしもきっちりとデータが詰められていなくても構いません。 d_reclen エントリは、ある dirent 構造体の先頭から次の構造体 (もし、 ある場合) までのオフセットとして使用することができます。 リターン時に、 転送された実際のバイト数が返されます。 fd に対する現在位置のポインタは、 エントリの次のブロックを 指し示すようにセットされます。 このポインタは、 必ずしも getdirentries によって返されたバイト数ずつ増加されるとは限りません。 返された値がゼロである場合には、 ディレクトリの終りに達しています。 現在位置のポインタは、 lseek(2) を 用いてセットし、 取り出すことができます。 getdirentries() は、 basep が指す場所へ読み取られたブロックの位置を 書き込みます。 ただし lseek(2) によって以前に返された以外の値か、 basep が指す場所に以前に返された以外の値か、 ゼロ以外の値に 現在位置を示すポインタを設定することは 安全ではありません。
リターン値
成功した場合には、 実際に転送されたバイトの数が返されます。 そうでない場合には、 −1 が返され、 グローバル変数 errno がエラーを 示すようにセットされます。
エラー
次の項目のうち、1 つ以上が真である場合、 getdirentries() は失敗します。
EBADF fd が、読み取りのために開かれている 有効なファイルディスクリプタではない。
EFAULT buf または basep のいずれかが、 割り当てられているアドレススペース外を 指している。
EIO ファイルシステムへの書き込みまたはファイルシステムからの読み取りを 行っている間に入出力エラーが発生した。
EINTR データが到着する前に、 遅いデバイスからの読み取りがシグナルによって割り込まれた。
関連事項
getdents(2), link(2), lseek(2), open(2V), stat(2), directory(3)
NEWS-OSRelease 4.2.1R