Scroll to navigation

MKDIR(2) Руководство программиста Linux 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 устанавливается в соответствующее значение.

ОШИБКИ

У процесса нет прав на запись в родительский каталог, или в одном из каталогов в pathname не разрешён поиск (см. также path_resolution(7)).
pathname уже существует (и необязательно как каталог). В этом случае pathname может быть символьной ссылкой, повисшей или нет.
Аргумент pathname указывает за пределы доступного адресного пространства.
Во время определения pathname встретилось слишком много символьных ссылок.
Количество ссылок на родительский каталог превысило бы LINK_MAX.
pathname слишком длинен.
Один из каталогов в pathname не существует или является повисшей символьной ссылкой.
Недостаточное количество памяти ядра.
На устройстве, содержащем pathname, нет места для создания нового каталога.
Новый каталог не может быть создан, так как превышена пользовательская дисковая квота.
Компонент пути, использованный как каталог в pathname, в действительности таковым не является.
Файловая система, содержащая pathname, не поддерживает создание каталогов.
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)

2010-06-26 Linux