mkdir()

Создать директорию

Прототип:

#include <sys/types.h>
#include <sys/stat.h>
int mkdir( const char *path,
mode_t mode );

Аргументы:

path
Имя каталога, который необходимо создать.
mode
Права для каталога, изменённые маской создания файла текущего процесса (см. umask()). Права доступа к файлу или каталогу задаются в виде комбинации битов, определённых в заголовочном файле <sys/stat.h>. Для получения дополнительной информации см. Права доступа.

Библиотека:

libc

Описание:

Функция mkdir() создаёт новый подкаталог с именем, заданным параметром path. Путь, заданный параметром path может быть относительным к текущему рабочему каталогу или абсолютным путём.


Note: Не все файловые системы поддерживают создание каталогов. Например, /dev/shmem, которая на самом деле не является файловой системой, но выглядит как таковая.

Идентификатор владельца каталога устанавливается равным эффективному идентификатору пользователя процесса. Идентификатор группы каталога устанавливается равным идентификатору группы родительского каталога (если установлен бит идентификатора родительской группы) или эффективному идентификатору группы процесса.

Вновь созданный каталог пуст.

Следующие биты, в дополнение к битам прав доступа к файлам, ведут себя следующим образом:

S_ISGID
Файлы и каталоги, созданные в этом каталоге, имеют идентификатор группы этого каталога, а не идентификатор группы процесса, создающего файл или каталог.
S_ISVTX
Файлы можно удалять или переименовывать, только если выполняется одно или несколько из следующих условий:

Функция mkdir() помечает поля st_atime, st_ctime и st_mtime каталога для обновления. Также обновляются поля st_ctime и st_mtime родительского каталога.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EACCES
Отказано в разрешении на поиск для компонента path или разрешении на запись в родительском каталоге path.
EEXIST
Каталог с именем, заданным параметром path, уже существует.
ELOOP
Слишком много уровней символических ссылок.
EMLINK
Количество ссылок родительского каталога может превысить значение LINK_MAX.
ENAMETOOLONG
Длина строки path превышает значение PATH_MAX, или компонент имени пути длиннее, чем NAME_MAX.
ENOENT
Компонент имени пути параметра path не существует или параметр path является пустой строкой.
ENOSPC
В файловой системе недостаточно места для хранения содержимого нового каталога или расширения родительского каталога.
ENOSYS
Эта функция не поддерживается для заданного path.
ENOTDIR
Компонент path не является каталогом.
EROFS
Родительский каталог находится в файловой системе, доступной только для чтения.

Примеры:

Создание нового каталога с именем /src в каталоге /hd:

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
int main( void )
{
(void)mkdir( "/hd/src", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH );
return (EXIT_SUCCESS);
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

struct stat, chdir(), chmod(), errno, fchdir(), getcwd(), mknod(), rmdir(), stat(), umask()




Предыдущий раздел: Описание API системной библиотеки