Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       opendir - open a directory

SYNOPSIS

       #include <dirent.h>

       DIR *opendir(const char *dirname);

DESCRIPTION

       The  opendir() function shall open a directory stream corresponding to the directory named
       by the dirname argument.  The directory stream is positioned at the first  entry.  If  the
       type  DIR  is implemented using a file descriptor, applications shall only be able to open
       up to a total of {OPEN_MAX} files and directories.

RETURN VALUE

       Upon successful completion, opendir() shall return a pointer to an  object  of  type  DIR.
       Otherwise, a null pointer shall be returned and errno set to indicate the error.

ERRORS

       The opendir() function shall fail if:

       EACCES Search permission is denied for the component of the path prefix of dirname or read
              permission is denied for dirname.

       ELOOP  A loop exists in symbolic  links  encountered  during  resolution  of  the  dirname
              argument.

       ENAMETOOLONG
              The  length  of  the dirname argument exceeds {PATH_MAX} or a pathname component is
              longer than {NAME_MAX}.

       ENOENT A component of dirname does not name an existing directory or dirname is  an  empty
              string.

       ENOTDIR
              A component of dirname is not a directory.

       The opendir() function may fail if:

       ELOOP  More  than  {SYMLOOP_MAX}  symbolic links were encountered during resolution of the
              dirname argument.

       EMFILE {OPEN_MAX} file descriptors are currently open in the calling process.

       ENAMETOOLONG
              As a result of encountering a symbolic link in resolution of the dirname  argument,
              the length of the substituted pathname string exceeded {PATH_MAX}.

       ENFILE Too many files are currently open in the system.

       The following sections are informative.

EXAMPLES

   Open a Directory Stream
       The following program fragment demonstrates how the opendir() function is used.

              #include <sys/types.h>
              #include <dirent.h>
              #include <libgen.h>
              ...
                  DIR *dir;
                  struct dirent *dp;
              ...
                  if ((dir = opendir (".")) == NULL) {
                      perror ("Cannot open .");
                      exit (1);
                  }

                  while ((dp = readdir (dir)) != NULL) {
              ...

APPLICATION USAGE

       The  opendir()  function  should  be  used  in conjunction with readdir(), closedir(), and
       rewinddir() to examine the  contents  of  the  directory  (see  the  EXAMPLES  section  in
       readdir() ). This method is recommended for portability.

RATIONALE

       Based  on  historical implementations, the rules about file descriptors apply to directory
       streams as well. However, this volume of IEEE Std 1003.1-2001 does not  mandate  that  the
       directory  stream  be  implemented  using  file descriptors. The description of closedir()
       clarifies that if a file descriptor is used for the directory stream, it is mandatory that
       closedir()  deallocate  the  file descriptor.  When a file descriptor is used to implement
       the directory stream, it  behaves  as  if  the  FD_CLOEXEC  had  been  set  for  the  file
       descriptor.

       The   directory   entries   for   dot   and   dot-dot   are   optional.   This  volume  of
       IEEE Std 1003.1-2001 does not provide a way to test a priori for their  existence  because
       an  application  that  is  portable must be written to look for (and usually ignore) those
       entries. Writing code that presumes that they are the first two entries  does  not  always
       work,  as  many implementations permit them to be other than the first two entries, with a
       "normal" entry preceding them. There is negligible value in providing a way  to  determine
       what the implementation does because the code to deal with dot and dot-dot must be written
       in any case and because such a flag would add to the list of those flags (which has proven
       in itself to be objectionable) and might be abused.

       Since the structure and buffer allocation, if any, for directory operations are defined by
       the  implementation,  this  volume  of   IEEE Std 1003.1-2001   imposes   no   portability
       requirements  for  erroneous program constructs, erroneous data, or the use of unspecified
       values such as the use or referencing of a dirp value or a dirent structure value after  a
       directory stream has been closed or after a fork() or one of the exec function calls.

FUTURE DIRECTIONS

       None.

SEE ALSO

       closedir()  ,  lstat() , readdir() , rewinddir() , symlink() , the Base Definitions volume
       of IEEE Std 1003.1-2001, <dirent.h>, <limits.h>, <sys/types.h>

COPYRIGHT

       Portions of this text are reprinted and  reproduced  in  electronic  form  from  IEEE  Std
       1003.1,  2003  Edition,  Standard  for Information Technology -- Portable Operating System
       Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003  by
       the  Institute  of  Electrical  and  Electronics Engineers, Inc and The Open Group. In the
       event of any discrepancy between this version and the original IEEE  and  The  Open  Group
       Standard,  the  original  IEEE  and  The  Open Group Standard is the referee document. The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .