+++ /dev/null
-.\" Copyright (C) 1995 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" %%%LICENSE_START(VERBATIM)
-.\" Permission is granted to make and distribute verbatim copies of this
-.\" manual provided the copyright notice and this permission notice are
-.\" preserved on all copies.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\"
-.\" Since the Linux kernel and libraries are constantly changing, this
-.\" manual page may be incorrect or out-of-date. The author(s) assume no
-.\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein. The author(s) may not
-.\" have taken the same level of care in the production of this manual,
-.\" which is licensed free of charge, as they might when working
-.\" professionally.
-.\"
-.\" Formatted or processed versions of this manual, if unaccompanied by
-.\" the source, must acknowledge the copyright and authors of this work.
-.\" %%%LICENSE_END
-.\"
-.\" Written 11 June 1995 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 22 July 1995 by Michael Chastain <mec@duracef.shout.net>:
-.\" Derived from 'readdir.2'.
-.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\"
-.\"*******************************************************************
-.\"
-.\" This file was generated with po4a. Translate the source file.
-.\"
-.\"*******************************************************************
-.\"
-.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
-.\" all rights reserved.
-.\" Translated Sat Feb 22 20:15:56 JST 1997
-.\" by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
-.\" Updated Sun Oct 12 JST 2003 by Kentaro Shirakata <argrath@ub32.org>
-.\" Updated Wed Jul 30 JST 2008 by Kentaro Shirakata <argrath@ub32.org>
-.\" Updated 2009-02-12 by Kentaro Shirakata <argrath@ub32.org>
-.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
-.\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
-.\"
-.TH GETDENTS 2 2012\-08\-03 Linux "Linux Programmer's Manual"
-.SH 名前
-getdents \- ディレクトリエントリーを取得する
-.SH 書式
-.nf
-\fBint getdents(unsigned int \fP\fIfd\fP\fB, struct linux_dirent *\fP\fIdirp\fP\fB,\fP
-\fB unsigned int \fP\fIcount\fP\fB);\fP
-.fi
-
-\fI注\fP: このシステムコールには glibc のラッパー関数は存在しない。「注意」の節を参照。
-.SH 説明
-これはあなたの関心を引くような関数ではない。 POSIX 準拠の C ライブラリインターフェースについては \fBreaddir\fP(3) を見ること。
-このページは、カーネルシステムコールの生のインターフェースについて 記載したものである。
-.PP
-\fBgetdents\fP() システムコールは、オープン済みのファイルディスクリプター \fIfd\fP で参照されるディレクトリから
-\fIlinux_dirent\fP 構造体をいくつか読み出し、 \fIdirp\fP が指しているバッファーに格納する。 \fIcount\fP
-引き数はそのバッファーのサイズを示す。
-.PP
-\fIlinux_dirent\fP 構造体は以下のように宣言されている:
-.PP
-.in +4n
-.nf
-struct linux_dirent {
- unsigned long d_ino; /* Inode number */
- unsigned long d_off; /* Offset to next \fIlinux_dirent\fP */
- unsigned short d_reclen; /* Length of this \fIlinux_dirent\fP */
- char d_name[]; /* Filename (null\-terminated) */
- /* length is actually (d_reclen \- 2 \-
- offsetof(struct linux_dirent, d_name)) */
- /*
- char pad; // Zero padding byte
- char d_type; // File type (only since Linux
- // 2.6.4); offset is (d_reclen \- 1)
- */
-
-}
-.fi
-.in
-.PP
-\fId_ino\fP は inode 番号である。 \fId_off\fP はディレクトリの先頭から次の \fIlinux_dirent\fP の先頭までの距離である。
-\fId_reclen\fP はこの \fIlinux_dirent\fP 全体のサイズである。 \fId_name\fP はヌル文字で終わるファイル名である。
-
-\fId_type\fP は、構造体の最後のバイトであり、ファイルタイプを示す。 \fId_type\fP は以下の値の一つを取る
-(\fI<dirent.h>\fP で定義されている)。
-.TP 12
-\fBDT_BLK\fP
-ブロックデバイスである。
-.TP
-\fBDT_CHR\fP
-キャラクターデバイスである。
-.TP
-\fBDT_DIR\fP
-ディレクトリである。
-.TP
-\fBDT_FIFO\fP
-名前付きパイプ (FIFO) である。
-.TP
-\fBDT_LNK\fP
-シンボリックリンクである。
-.TP
-\fBDT_REG\fP
-通常のファイルである。
-.TP
-\fBDT_SOCK\fP
-UNIX ドメインソケットである。
-.TP
-\fBDT_UNKNOWN\fP
-ファイルタイプが不明である。
-.PP
-\fId_type\fP フィールドは Linux 2.6.4 から実装されている。 これは \fIlinux_dirent\fP
-構造体のうち、以前はゼロで埋められていた空間に配置されている。 従って、2.6.3 以前のカーネルでは、このフィールドにアクセスしようとすると 常に値
-0 (\fBDT_UNKNOWN\fP) が返される。
-.PP
-.\" kernel 2.6.27
-.\" The same sentence is in readdir.2
-現在のところ、 \fId_type\fP でファイルタイプを返す機能が完全にサポートされているのは、 いくつかのファイルシステムにおいてのみである
-(Btrfs, ext2, ext3, ext4 はサポートしている)。 どのアプリケーションも、 \fBDT_UNKNOWN\fP
-が返された際に適切に処理できなければならない。
-.SH 返り値
-成功した場合は、読み込んだバイト数が返される。 ディレクトリの終わりならば 0 が返される。 エラーの場合は \-1 を返され、 \fIerrno\fP
-に適切な値が設定される。
-.SH エラー
-.TP
-\fBEBADF\fP
-ファイルディスクリプター \fIfd\fP が不正である。
-.TP
-\fBEFAULT\fP
-引き数が呼び出したプロセスのアドレス空間外を指している。
-.TP
-\fBEINVAL\fP
-結果用のバッファーが小さすぎる。
-.TP
-\fBENOENT\fP
-そのようなディレクトリは存在しない。
-.TP
-\fBENOTDIR\fP
-ファイルディスクリプターがディレクトリを参照していない。
-.SH 準拠
-.\" SVr4 documents additional ENOLINK, EIO error conditions.
-SVr4.
-.SH 注意
-glibc はこのシステムコールに対するラッパー関数を提供していないので、 \fBsyscall\fP(2) を使って呼び出すこと。
-\fIlinux_dirent\fP 構造体は自分で定義する必要がある。しかし、たいていはこのシステムコールではなく \fBreaddir\fP(3)
-を使うべき場面のことが多い。
-
-このシステムコールは \fBreaddir\fP(2) を置き換えるものである。
-
-元々の Linux の \fBgetdents\fP() システムコールは、大きなファイルシステムと
-大きなファイルオフセットを扱うことができなかった。
-その結果、Linux 2.4 で \fBgetdents64\fP() が追加された。
-\fBgetdents64\fP() では、\fIlinux_dirent\fP 構造体のフィールド \fId_ino\fP と
-\fId_off\fP でビット幅の大きなデータ型が使われている。
-.SH 例
-.\" FIXME The example program needs to be revised, since it uses the older
-.\" getdents() system call and the structure with smaller field widths.
-下記のプログラムは \fBgetdents\fP() の使用例を示したものである。 以下は、このプログラムを ext2 ディレクトリで実行した際に得られる
-出力の例である。
-
-.in +4n
-.nf
-$\fB ./a.out /testfs/\fP
-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- nread=120 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
-inode# file type d_reclen d_off d_name
- 2 directory 16 12 .
- 2 directory 16 24 ..
- 11 directory 24 44 lost+found
- 12 regular 16 56 a
- 228929 directory 16 68 sub
- 16353 directory 16 80 sub2
- 130817 directory 16 4096 sub3
-.fi
-.in
-.SS プログラムのソース
-\&
-.nf
-#define _GNU_SOURCE
-#include <dirent.h> /* Defines DT_* constants */
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-
-struct linux_dirent {
- long d_ino;
- off_t d_off;
- unsigned short d_reclen;
- char d_name[];
-};
-
-#define BUF_SIZE 1024
-
-int
-main(int argc, char *argv[])
-{
- int fd, nread;
- char buf[BUF_SIZE];
- struct linux_dirent *d;
- int bpos;
- char d_type;
-
- fd = open(argc > 1 ? argv[1] : ".", O_RDONLY | O_DIRECTORY);
- if (fd == \-1)
- handle_error("open");
-
- for ( ; ; ) {
- nread = syscall(SYS_getdents, fd, buf, BUF_SIZE);
- if (nread == \-1)
- handle_error("getdents");
-
- if (nread == 0)
- break;
-
- printf("\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- nread=%d \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\en", nread);
- printf("inode# file type d_reclen d_off d_name\en");
- for (bpos = 0; bpos < nread;) {
- d = (struct linux_dirent *) (buf + bpos);
- printf("%8ld ", d\->d_ino);
- d_type = *(buf + bpos + d\->d_reclen \- 1);
- printf("%\-10s ", (d_type == DT_REG) ? "regular" :
- (d_type == DT_DIR) ? "directory" :
- (d_type == DT_FIFO) ? "FIFO" :
- (d_type == DT_SOCK) ? "socket" :
- (d_type == DT_LNK) ? "symlink" :
- (d_type == DT_BLK) ? "block dev" :
- (d_type == DT_CHR) ? "char dev" : "???");
- printf("%4d %10lld %s\en", d\->d_reclen,
- (long long) d\->d_off, d\->d_name);
- bpos += d\->d_reclen;
- }
- }
-
- exit(EXIT_SUCCESS);
-}
-.fi
-.SH 関連項目
-\fBreaddir\fP(2), \fBreaddir\fP(3)
-.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。