Man Linux: Main Page and Category List

NAME

       mkdir - make a directory

SYNOPSIS

       #include <sys/stat.h>

       int mkdir(const char *path, mode_t mode);

DESCRIPTION

       The  mkdir()  function shall create a new directory with name path. The
       file permission bits of the new directory  shall  be  initialized  from
       mode. These file permission bits of the mode argument shall be modified
       by the process’ file creation mask.

       When bits in mode other than the file  permission  bits  are  set,  the
       meaning of these additional bits is implementation-defined.

       The directory’s user ID shall be set to the process’ effective user ID.
       The directory’s group ID shall be set to the group  ID  of  the  parent
       directory or to the effective group ID of the process.  Implementations
       shall provide a way to initialize the directory’s group ID to the group
       ID  of the parent directory. Implementations may, but need not, provide
       an implementation-defined way to initialize the directory’s group ID to
       the effective group ID of the calling process.

       The newly created directory shall be an empty directory.

       If  path  names  a  symbolic  link, mkdir() shall fail and set errno to
       [EEXIST].

       Upon successful completion, mkdir() shall mark for update the st_atime,
       st_ctime,  and st_mtime fields of the directory. Also, the st_ctime and
       st_mtime fields of the directory that contains the new entry  shall  be
       marked for update.

RETURN VALUE

       Upon successful completion, mkdir() shall return 0. Otherwise, -1 shall
       be returned, no directory shall be created, and errno shall be  set  to
       indicate the error.

ERRORS

       The mkdir() function shall fail if:

       EACCES Search  permission  is denied on a component of the path prefix,
              or write permission is denied on the  parent  directory  of  the
              directory to be created.

       EEXIST The named file exists.

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

       EMLINK The link count of the parent directory would exceed  {LINK_MAX}.

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

       ENOENT A component of the path prefix specified by path does  not  name
              an existing directory or path is an empty string.

       ENOSPC The  file  system  does  not  contain  enough  space to hold the
              contents of the new directory or to extend the parent  directory
              of the new directory.

       ENOTDIR
              A component of the path prefix is not a directory.

       EROFS  The parent directory resides on a read-only file system.

       The mkdir() function may fail if:

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

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

       The following sections are informative.

EXAMPLES

   Creating a Directory
       The  following  example  shows  how  to  create   a   directory   named
       /home/cnd/mod1, with read/write/search permissions for owner and group,
       and with read/search permissions for others.

              #include <sys/types.h>
              #include <sys/stat.h>

              int status;
              ...
              status = mkdir("/home/cnd/mod1", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);

APPLICATION USAGE

       None.

RATIONALE

       The mkdir() function originated in 4.2 BSD and was added to System V in
       Release 3.0.

       4.3 BSD detects [ENAMETOOLONG].

       The POSIX.1-1990 standard required that the group ID of a newly created
       directory be set to the group ID of its  parent  directory  or  to  the
       effective  group  ID  of the creating process. FIPS 151-2 required that
       implementations provide a way to have the group ID be set to the  group
       ID  of  the  containing directory, but did not prohibit implementations
       also supporting a way to set the group ID to the effective group ID  of
       the  creating  process. Conforming applications should not assume which
       group ID will be used. If it matters, an application can use chown() to
       set  the  group  ID  after the directory is created, or determine under
       what conditions the implementation will set the desired group ID.

FUTURE DIRECTIONS

       None.

SEE ALSO

       umask()  ,  the  Base  Definitions  volume   of   IEEE Std 1003.1-2001,
       <sys/stat.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 .