GETDENTS(2)

名前
getdents - ディレクトリ・エントリを取得する

書式
#include <unistd.h>
#include <linux/dirent.h>
#include <linux/unistd.h>

_syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count);

int getdents(unsigned int fd, struct dirent *dirp, unsigned int count);

説明
getdents は fd で指定したディレクトリから dirp が指しているメモリ領域にいくつかの dirent 構造体を読み込む。 count パラメーターは メモリ領域のサイズである。

dirent 構造体は以下のように宣言される:

    struct dirent
    {
        long d_ino;                 /* inode number */
        off_t d_off;                /* offset to next dirent */
        unsigned short d_reclen;    /* length of this dirent */
        char d_name [NAME_MAX+1];   /* file name (null-terminated) */
    }

d_ino は inode 番号である。 d_off はディレクトリの先頭から次の dirent の先頭までの距離である。 d_reclen はこの dirent 全体のサイズである。 d_name はヌル(null)文字で終るファイル名である。

このコールは readdir(2) に取って代わる。

返り値
成功した場合は、読み込んだバイト数が返される。 ディレクトリの終りならば 0 が返される。 エラーの場合は -1 を返され、 errno に適切な値が設定される。

エラー

EBADF
    fd が適切なファイル・ディスクリプターではない。

EFAULT
    引き数のポインターが呼び出したプロセスがアクセス可能な空間の 外部を指している。

EINVAL
    結果用のバッファーが小さすぎる。

ENOENT
    そうようなディレクトリは存在しない。

ENOTDIR
    ファイル・ディスクリプターがディレクトリを参照していない。

準拠
SVr4, SVID。 SVr4 では他に ENOLINK, EIO エラー状態についても 記述している。

関連項目
readdir(2), readdir(3)