|
VMS Help CRTL, closedir, Example *Conan The Librarian |
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 );
}
|
|