kazmax - Linux で自宅サーバー

getdents - システムコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 準拠
  7. 関連項目

名前

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

書式

#include <unistd.h>
#include <linux/types.h>
#include <linux/dirent.h>
#include <linux/unistd.h>
#include <errno.h>

_syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count) /* Using syscall(2) may be preferable; see intro(2) */
int getdents(unsigned int fd, struct dirent *dirp, unsigned int count);

説明

これはあなたが興味を持つような関数ではない。 POSIX 準拠の C ライブラリインターフェースについては   readdir (3) を見ること。 このページは裸のカーネルシステムコールインターフェースを記している。

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];   /* filename (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.

関連項目