|
≫ |
|
|
|
HP OpenVMS HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)
ディレクトリをクローズします。
形式
#include <dirent.h>
int closedir (DIR *dir_pointer);
引数
dir_pointerオープンされているディレクトリの
dir構造体を指すポインタ。
説明
closedir関数は,ディレクトリ・ストリームをクローズし, dir_pointer 引数に関連付けられている構造体を解放します。関数から戻るときに,dir_pointer の値は必ずしも
DIR型のアクセス可能なオブジェクトを示すとは限りません。
DIR型は,
<dirent.h>ヘッダ・ファイルに定義されており,特定のディレクトリ内のすべてのディレクトリ・エントリを順に並べたシーケンスであるディレクトリ・ストリームを表します。ディレクトリ・エントリはファイルを表します。
readdir関数の操作とは非同期的に,ファイルをディレクトリから削除したり,ディレクトリに追加することができます。
| 注意
後でディレクトリを正しくオープンすることができるように,オープンされているディレクトリは必ず
closedir関数を使用してクローズする必要があります。
|
例
次の例では,
opendir関数,
readdir関数,
closedir関数を使用して,ディレクトリからエントリ名を検索する方法を示しています。
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FOUND 1
#define NOT_FOUND 0
static int dir_example(const char *name, unsigned int unix_style)
{
DIR *dir_pointer;
struct dirent *dp;
if ( unix_style )
dir_pointer = opendir(".");
else
dir_pointer = opendir(getenv("PATH"));
if ( !dir_pointer ) {
perror("opendir");
return NOT_FOUND;
}
/* Note, that if opendir() was called with UNIX style file */
/* spec like ".", readdir() will return only a single */
/* version of each file in the directory. In this case the */
/* name returned in d_name member of the dirent structure */
/* will contain only file name and file extension fields, */
/* both lowercased like "foo.bar". */
/* If opendir() was called with OpenVMS style file spec, */
/* readdir() will return every version of each file in the */
/* directory. In this case the name returned in d_name */
/* member of the dirent structure will contain file name, */
/* file extension and file version fields. All in upper */
/* case, like "FOO.BAR;1". */
for ( dp = readdir(dir_pointer);
dp && strcmp(dp->d_name, name);
dp = readdir(dir_pointer) )
;
closedir(dir_pointer);
if ( dp != NULL )
return FOUND;
else
return NOT_FOUND;
}
int main(void)
{
char *filename = "foo.bar";
FILE *fp;
remove(filename);
if ( !(fp = fopen(filename, "w")) ) {
perror("fopen");
return (EXIT_FAILURE);
}
if ( dir_example( "FOO.BAR;1", 0 ) == FOUND )
puts("OpenVMS style: found");
else
puts("OpenVMS style: not found");
if ( dir_example( "foo.bar", 1 ) == FOUND )
puts("UNIX style: found");
else
puts("UNIX style: not found");
fclose(fp);
remove(filename);
return( EXIT_SUCCESS );
}
|
戻り値
0
|
正常終了を示します。
|
-1
|
エラーを示します。エラーの詳細はグローバルな
errno
に指定されます。
|
|