名前
getdents - ディレクトリ・エントリを取得する
書式
#include <unistd.h>
#include <linux/types.h>
#include <linux/dirent.h>
#include <linux/unistd.h>
#include <errno.h>
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.
注意
glibc はこのシステムコールに対するラッパー関数を提供していない。 syscall(2) を使って呼び出すこと。