VMS Help
CRTL, closedir
*Conan The Librarian
|
Closes directories.
Format
#include <dirent.h>
int closedir (DIR *dir_pointer);
dir_pointer
Pointer to the dir structure of an open directory.
The closedir function closes a directory stream and frees
the structure associated with the dir_pointer argument. Upon
return, the value of dir_pointer does not necessarily point to an
accessible object of the type DIR.
The type DIR, which is defined in the <dirent.h> header file,
represents a directory stream that is an ordered sequence of
all the directory entries in a particular directory. Directory
entries represent files. You can remove files from or add files
to a directory asynchronously to the operation of the readdir
function.
NOTE
An open directory must always be closed with the closedir
function to ensure that the next attempt to open the
directory is successful.
The following example shows how to search a directory for the
entry name, using the opendir, readdir, and closedir functions:
#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 Indicates success.
-1 Indicates an error and is further specified in
the global errno.