SCANDIRAT(3)

名前
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.54 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。