__opendir2() — ディレクトリーのオープン

標準

標準/拡張機能 C/C++ 依存項目

z/OS®UNIX

両方 OS/390 V2R6

形式

#define _OPEN_SYS_DIR_EXT
#include <dirent.h>

DIR *__opendir2(const char *dirname, size_t bufsize);

機能説明

ディレクトリーをオープンして、readdir() または __readdir2() で読み取れるようにします。 最初の readdir() または __readdir2() 呼び出しが、ディレクトリー内の最初のエントリーを読み取ります。

dirname は、オープンしたいディレクトリーの名前を指定するストリングです。bufsize は、ディレクトリーのエントリーを保持するために readdir() または __readdir2() が 使用する内部作業バッファーのサイズ (バイト単位) です。このバッファーが大きいほど、 多数のディレクトリー・エントリーを読み取るときのオーバーヘッドは 小さくなります。このバッファーは、ディレクトリーがクローズされるまで存在し続けます。 指定されたバッファー・サイズが小さすぎる場合、そのサイズは無視されます。最小サイズの バッファーが代わりに使用されます。

__opendir2() は、バッファー・サイズをパラメーターとして指定できる点を除いて、opendir() と 同じです。

戻り値

正常終了した場合、__opendir2() は DIR オブジェクトへのポインターを戻します。 このオブジェクトは、ディレクトリーについて記述し、FILE オブジェクトがファイル入出力操作で使用されるのと同様に、 ディレクトリーに対する以降の操作で使用されます。

正常終了しなかった場合、__opendir2() は NULL ポインターを戻し、errno を以下の いずれかの値に設定します。
エラー・コード
説明
EACCES
プロセスに dirname の一部のコンポーネントを検索する許可がないか、 ディレクトリー自体に対する読み取り許可がありません。
ELOOP
シンボリック・リンクにループが存在しています。このエラーは、 dirname 引数の解決で POSIX_SYMLOOP (limits.h ヘッダー・ファイル内に定義されている) より多くのシンボリック・リンクが 検出された場合に発行されます。
EMFILE
プロセスには、既にオープンしている他のファイル記述子が多すぎます。
ENAMETOOLONG
_POSIX_NO_TRUNC が有効ですが、dirnamePATH_MAX 文字より長い か、または dirname の一部のコンポーネントが NAME_MAX 文字 より長くなっています。シンボリック・リンクの場合、シンボリック・リンクの代わりに使われる パス名のストリングの長さが PATH_MAX を超えています。PATH_MAX 値と NAME_MAX 値は 、pathconf() を使用して確認できます。
ENFILE
システム全体で、既にオープンしている他のファイル記述子が多すぎます。
ENOENT
ディレクトリー dirname は存在しません。
ENOMEM
bufsize バイトの長さのバッファーを使用してディレクトリーを オープンするのに使用可能な十分なストレージがありません。
ENOTDIR
dirname パス名の一部のコンポーネントがディレクトリーではありません。

関連情報