日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

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 に指定されます。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.