mkdir

MKDIR(2)                 Руководство программиста Linux                 MKDIR(2)



ИМЯ
       mkdir, mkdirat - создаёт каталог

ОБЗОР
       #include <sys/stat.h>
       #include <sys/types.h>

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

       #include <fcntl.h>           /* определения констант AT_* */
       #include <sys/stat.h>

       int mkdirat(int dirfd, const char *pathname, mode_t mode);

   Требования макроса тестирования свойств для glibc (см.
   feature_test_macros(7)):

       mkdirat():
           Начиная с glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           До glibc 2.10:
               _ATFILE_SOURCE

ОПИСАНИЕ
       Функция mkdir() пытается создать каталог с именем pathname.

       В аргументе mode задаются права доступа к новому каталогу (смотрите
       stat(2)). Эти права стандартным образом изменяются с помощью согласно
       umask процесса: при отсутствии списка доступа по умолчанию права на
       созданный каталог будутрассчитаны как (mode & ~umask & 0777). Другие биты
       mode прав на создаваемый каталог зависят от операционной системы. Для
       Linux они описаны в ЗАМЕЧАНИЯХ.

       Создаваемый каталог будет принадлежать фактическому владельцу процесса.
       Если у родительского каталога установлен флаг set-group-ID, или файловая
       система смонтирована с семантикой групп в стиле BSD (mount -o bsdgroups
       или, что одно и тоже, mount -o grpid), то новый каталог унаследует группу
       владельца от своего родительского каталога; в противном случае группой
       владельцем станет фактическая группа процесса.

       Если у родительского каталога установлен бит set-group-ID, то он будет
       установлен также и у создаваемого каталога.

   mkdirat()
       Системный вызов mkdirat() работает также как системный вызов mkdir(), за
       исключением случаев, описанных здесь.

       Если в pathname задан относительный путь, то он считается относительно
       каталога, на который ссылается файловый дескриптор dirfd (а не
       относительно текущего рабочего каталога вызывающего процесса, как это
       делается в mkdir()).

       Если в pathname задан относительный путь и dirfd равно специальному
       значению AT_FDCWD, то pathname рассматривается относительно текущего
       рабочего каталога вызывающего процесса (как mkdir()).

       Если в pathname задан абсолютный путь, то dirfd игнорируется.

       Смотрите в openat(2) объяснение необходимости mkdirat().

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       При успешном выполнении вызовов mkdir() и mkdirat() возвращается 0. В
       случае ошибки возвращается -1, а errno устанавливается в соответствующее
       значение.

ОШИБКИ
       EACCES У процесса нет прав на запись в родительский каталог, или в одном
              из каталогов в pathname не разрешён поиск (см. также
              path_resolution(7)).

       EDQUOT Исчерпана пользовательская квота на дисковые блоки или иноды
              файловой системы.

       EEXIST pathname уже существует (и необязательно как каталог). В этом
              случае pathname может быть символьной ссылкой, повисшей или нет.

       EFAULT Аргумент pathname указывает за пределы доступного адресного
              пространства.

       ELOOP  Во время определения pathname встретилось слишком много символьных
              ссылок.

       EMLINK Количество ссылок на родительский каталог превысило бы LINK_MAX.

       ENAMETOOLONG
              pathname слишком длинен.

       ENOENT Один из каталогов в pathname не существует или является повисшей
              символьной ссылкой.

       ENOMEM Недостаточное количество памяти ядра.

       ENOSPC На устройстве, содержащем pathname, нет места для создания нового
              каталога.

       ENOSPC Новый каталог не может быть создан, так как превышена
              пользовательская дисковая квота.

       ENOTDIR
              Компонент пути, использованный как каталог в pathname, в
              действительности таковым не является.

       EPERM  Файловая система, содержащая pathname, не поддерживает создание
              каталогов.

       EROFS  pathname указывает на файл в файловой системе, доступной только
              для чтения.

       В mkdirat() дополнительно могут возникнуть следующие ошибки:

       EBADF  dirfd не является правильным файловым дескриптором.

       ENOTDIR
              Значение pathname содержит относительный путь и dirfd содержит
              файловый дескриптор, указывающий на файл, а не на каталог.

ВЕРСИИ
       Вызов mkdirat() был добавлен в ядро Linux версии 2.6.16; поддержка в
       glibc доступна с версии 2.4.

СООТВЕТСТВИЕ СТАНДАРТАМ
       mkdir(): SVr4, BSD, POSIX.1-2001, POSIX.1-2008.

       mkdirat(): POSIX.1-2008.

ЗАМЕЧАНИЯ
       В Linux кроме битов прав, в mode учитывается также бит S_ISVTX.

       В протоколе, на котором работает NFS, есть множество недоработок.
       Некоторые из них влияют на mkdir().

   Замечания по glibc
       В старых ядрах, где mkdirat() отсутствует, обёрточная функция glibc
       использует mkdir(). Если pathname является относительным путём, то glibc
       собирает путь относительно символической ссылки в /proc/self/fd, которая
       соответствует аргументу dirfd.

СМОТРИТЕ ТАКЖЕ
       mkdir(1), chmod(2), chown(2), mknod(2), mount(2), rmdir(2), stat(2),
       umask(2), unlink(2), acl(5) path_resolution(7)



Linux                              2016-03-15                           MKDIR(2)