Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getdirentries(2) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

open(2V)

lseek(2)

GETDIRENTRIES(2)  —  UNIX Programmer’s Manual

名称

getdirentries − ディレクトリエントリをファイルシステムに依存しないフォーマットで取り出す。

形式

#include <sys/dir.h>
cc = getdirentries(fd, buf, nbytes, basep)
int cc, fd;
char ∗buf;
int nbytes;
long ∗basep

解説

getdirentries は、 ディレクトリエントリを ファイルディスクリプタ fd で参照されるディレクトリから、 buf によって指し示されたバッファへ、 ファイルシステムに依存しないフォーマットでコピーします。 nbytes までのデータが転送されます。 nbytes は、 そのファイルのブロックサイズ (stat(2) 参照)以上でなければなりません。 それより小さなサイズにすると、 ファイルシステムによってはエラーが発生します。 バッファ内のデータは、 一連の direct 構造体で、 各構造体には次のエントリが収められています。

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 エントリは、ある直接 構造体の先頭から次の構造体(もし、 ある場合)までのオフセットとして使用することができます。 リターン時に、 転送された実際のバイト数が返されます。 fd に対する現在位置のポインタは、 エントリの次のブロックを 指し示すようにセットされます。 このポインタは、 必ずしも getdirentries によって返されたバイト数ずつ増加されるとは限りません。 返された値がゼロである場合には、 ディレクトリの終りに達しています。 現在位置のポインタは、 lseek(2) を 用いてセットし、 取り出すことができます。 getdirentries は、 basep によって指し示されているロケーションへ読み取られたブロックの位置を 書き込みます。 現位置ポインタの値を、 lseek(2) によって以前に返された値以外の値か、 basep またはゼロによって指し示されたロケーション中で 以前に返された値以外の値にセットすることは安全ではありません。

リターン値

成功した場合には、 実際に転送されたバイトの数が返されます。 そうでない場合には、 −1 が返され、 グローバル変数 errno がエラーを 示すようにセットされます。

エラー

次の項目のうち、1つ以上が真である場合、 getdirentries は失敗します。

EBADF fd が、 読み取りのためにオープンされている有効なファイルディスクリプタではない。

EFAULT buf または basep のいずれかが、 割り当てられているアドレススペースの外を 指している。

EIO ファイルシステムへの書き込みまたはファイルシステムからの読み取りを 行っている間に入出力エラーが発生した。

EINTR データが到着する前に、 遅いデバイスからの読み取りがシグナルによって割り込まれた。

関連事項

open(2V), lseek(2)

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026