Документация по LinuxLinuxDoc.Ru 🔍

mknod - создает специальный или обычный файл

НАЗВАНИЕ
mknod - создает специальный или обычный файл

СИНТАКСИС
#include
#include
#include
#include

int mknod(const char *pathname, mode_t mode, dev_t dev);

ОПИСАНИЕ
mknod пытается создать файл (обычный файл, файл устройства
или именованый канал) с таким именем, на которое ссылается
параметр pathname, с правами доступа mode и дополнительной
информацией dev. Параметр mode задает как права доступа,
так и тип файла, который нужно создать. В этом параметре
содержится битовая комбинация (проделайте поразрядную
операцию OR) одного из нижеперечисленных типов файлов и
прав доступа для нового узла. Права доступа изменяются,
при этом значение umask процесса используется обычным
способом: права доступа становятся равны (mode & ~umask).
Тип файла должен быть одним из следующих: S_IFREG,
S_IFCHR, S_IFBLK и S_IFIFO, которые задают,
соответственно, обычный файл (который будет пустым после
создания), символьное устройство, блочное устройство или
канал FIFO (именованый канал); тип файла может иметь
нулевое значение, что создаст обычный файл. Если тип
файла - S_IFCHR или S_IFBLK, то dev задает основной и
вспомогательный номера создаваемого файла устройства; в
остальных случаях параметр игнорируется. Если pathname
уже существует, или является символьной ссылкой, то вызов
завершается с ошибкой EEXIST. Созданный файл будет
принадлежать фактическому владельцу процесса. Если в
правах доступа к каталогу, в котором находится файл,
установлен бит setgid, или если файловая система
смонтирована с семантикой групп BSD, то новый файл
унаследует группу-владельца от своего родительского
каталога; в противном случае группой-владельцем станет
фактическая группа процесса.

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

КОДЫ ОШИБОК
EPERM С помощью вызова mode любой пользователь может
создать канал FIFO. Все прочие файлы может
создавать только суперпользователь. Эта ошибка
может появиться и в том случае, если файловая
система, содержащая pathname, не поддерживает
создание запрошенного типа файла.

EINVAL В параметре mode запрошено создание неизвестного
типа файла.

EEXIST pathname уже существует.

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

EACCES Родительский каталог не дает процессу прав на
запись, или же один из каталогов в pathname не дает
прав на поиск (выполнение).

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

ENOENT Компонент пути pathname не существует или является
"висячей" символьной ссылкой.

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

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

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

ELOOP pathname является зацикленной символьной ссылкой,
то есть при соответствующей подстановке возникает
ссылка на неё саму.

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

СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4 (этот системный вызов требует привилегий, поэтому не
упомянут в POSIX), 4.4BSD. Версия Linux отличается от
версии SVr4 тем, что не требует прав суперпользователя для
создания каналов FIFO, а также тем, что не описывает коды
ошибок EMULTIHOP, ENOLINK и EINTR.

ЗАМЕЧАНИЯ
Стандарт POSIX 1003.1-2001 гласит: "Единственно, как можно
использовать mknod() в переносимых программах - это
создавать специальные FIFO-файлы. Если mode на является
S_IFIFO или dev не равно 0, то поведение mknod()
неопределено." В Linux этот вызов не может создавать
каталоги и сокеты, а также не может создавать обычные
файлы без прав суперпользователя. Создавать каталоги
необходимо через mkdir, а FIFO - через mkfifo. В
протоколе, в котором работает NFS, содержится множество
недоработок. Некоторые из них влияют на mknod.
Читать новости Linux в Telegram
Linux - mknod - создает специальный или обычный файл
Мы в соцсетях ✉