標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
z/OS®UNIX |
両方 | OS/390 V2R6 |
#define _OPEN_SYS_DIR_EXT
#include <dirent.h>
struct dirent *__readdir2(DIR *dir, struct stat *info);
__readdir2() 関数は、dir に関連したディレクトリー・ストリーム内の次のディレクトリー項目が記述されている、dirent 構造体へのポインターを戻します。
dirent 構造体には、文字ポインター d_name が含まれて おり、これがディレクトリー内のファイル名を付けるストリングを指しています。このストリングは、終了の NULL で終わり、最大 NAME_MAX 文字が入っています。
info 引数は、ファイル d_name に関する情報が入 るストレージの領域を指します。 この情報は、sys/stat.h ヘッダー・ファイルで定義されたように、stat 構造体に戻されます。この構造体の形式は、lstat() 関数に関する トピックに記述されています。info が NULL の場合、stat 情報は渡されません。
ドットまたはドット・ドットのエントリーが存在している場合には、1 つのエントリーが ドット用に戻され、1 つの項目がドット・ドット用に戻されることになります。そのようになっていない場合には、これらのエントリーは戻されません。
__readdir2() の呼び出しで、同じディレクトリー・ストリームの __readdir2() または readdir() への前回の呼び出しによって作成されたデータが上書き されます。異なるディレクトリー・ストリームの呼び出しでは、相互のデータは上書きされません。
closedir() によって dirent データは解放されるので、必要に応じて、closedir() を呼び出す前に readdir2() の dirent データを保管してください。
__readdir2() 関数は、実際の読み取り操作ごとに複数のディレクトリー項目をバッファーに入れることができます。ディレクトリーが実際に読み取られるたびに、__readdir2() はディレクトリーの st_atime (アクセス時刻) フィールドを更新します。
fork() の呼び出しの後、親または子のいずれか (両方ではない) が、__readdir2()、readdir()、rewinddir() または seekdir() を使ってディレクトリー・ストリームの処理を続行することができます。親と子の両方のプロセスでこれらの関数を使用すると、結果は未定義です。
エントリーでシンボリック・リンクの名前を指定すると、dirent 構造体の d_ino メンバーの値が未指定になります。
__readdir2() を呼び出す前に、closedir() を使ってディレクトリー・ストリームをクローズすると、予期しない結果になる場合があります。ディレクトリーのオープン以後にディレクトリーの内容が変更されている (ファイルが追加 されるか削除されている) 場合は、後続の _readdir2() 要求で新しい内容を読み取れるように するため、rewinddir() を呼び出してください。
この関数からの出力は、readdir() と lstat() の組み合わせに似ています。 場合によっては、出力 stat 構造体内のある特定の情報と、lstat() が 戻す情報とが異なることもあります。また、__readdir2() の場合、dir 内の d_extra フィールドは、常に NULL です。
正常に実行された場合、__readdir2() は、ディレクトリー・ストリームの 次のディレクトリーを記述している dirent 構造体へのポインター を戻します。__readdir2() がディレクトリー・ストリームの終わりに達すると、NULL ポインター を戻します。