MKDIR(2)

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

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

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

ОПИСАНИЕ
Функция mkdir() пытается создать каталог с именем pathname. В аргументе mode задаются права доступа. Эти права стандартным образом изменяются с помощью согласно umask процесса: права на созданный каталог будут рассчитаны как mode & ~umask & 0777. Другие биты прав на каталог зависят от операционной системы. Для Linux они будут описаны далее. Создаваемый каталог будет принадлежать фактическому владельцу процесса. Если у родительского каталога установлен флаг set-group-ID, или файловая система смонтирована с семантикой групп в стиле BSD (mount -o bsdgroups или, что одно и тоже, mount -o grpid), то новый каталог унаследует группу владельца от своего родительского каталога; в противном случае группой владельцем станет фактическая группа процесса. Если у родительского каталога установлен бит set-group-ID, то он будет установлен также и у создаваемого каталога.

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

ОШИБКИ

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

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

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

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

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

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

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

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

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

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

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

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

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

СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, BSD, POSIX.1-2001.

ЗАМЕЧАНИЯ
В Linux кроме битов прав, соблюдается только бит S_ISVTX. То есть в Linux создаваемый каталог на самом деле получает права, вычисляемые как mode & ~umask & 01777. Смотрите также stat(2).

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

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