scandirat -
ディレクトリのファイルディスクリプタからの相対パスで指定されたディレクトリを走査する
#define _GNU_SOURCE /* feature_test_macros(7) 参照 */
#include <fcntl.h> /* AT_* 定数の定義 */
#include <dirent.h>
int scandirat(int dirfd, const char *dirp,
struct dirent ***namelist,
int (*filter)(const struct dirent *),
int (*compar)(const struct dirent **, const struct dirent **));
scandirat()
システムコールは
scandir()
と全く同様の動作をする。
差分についてこのマニュアルページで説明する。
dirp
で指定されたパス名が相対パスの場合、ファイルディスクリプタ
dirfd
が参照するディレクトリからの相対パスと解釈される
(これに対して、
scandir(3)
の場合は、相対パス名は、呼び出したプロセスの
カレントワーキングディレクトリからの相対パスと解釈される)。
dirp が相対パスで
dirfd
が特別な値
AT_FDCWD
の場合、
dirp は (
scandir(3)
と同様に)
呼び出したプロセスのカレントワーキング
ディレクトリからの相対パスと解釈される。
dirp
が絶対パスの場合、
dirfd は無視される。
返り値¶
成功した場合は、
scandirat()
は選択されたディレクトリエントリ数を返す。
エラーの場合、 -1
が返され、
errno
にエラーを示す値が設定される。
エラー¶
scandir(3)
で発生するのと同じエラーが
scandirat() でも発生する。
scandirat()
では追加で以下のエラーも発生する:
- EBADF
- dirfd
が有効なファイルディスクリプタではない。
- ENOTDIR
- dirp
が相対パスで、 dirfd
がディレクトリ以外のファイルを参照している
ファイルディスクリプタである。
バージョン¶
scandirat() は glibc バージョン 2.15
で追加された。
この関数は GNU
による拡張である。
scandirat()
が必要な理由については
openat(2)
を参照すること。
関連項目¶
openat(2),
scandir(3),
path_resolution(7)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。