Closes directories. Format #include <dirent.h> int closedir (DIR *dir_pointer);
1 – Argument
dir_pointer Pointer to the dir structure of an open directory.
2 – Description
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.
3 – Example
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 ); }
4 – Return Values
0 Indicates success. -1 Indicates an error and is further specified in the global errno.