Rechercher une page de manuel
mknod
Langue: ru
Version: 2003-04-23 (fedora - 25/11/07)
Section: 2 (Appels système)
Sommaire
ИМЯ
mknod - создать специальный или обычный файлОБЗОР
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> 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 или S_IFSOCK которые опрделяют соответственно обычный файл (который будет создан пустым), специальный символьный файл, специальный блочный файл, FIFO (именованный канал) или доменный сокет Unix. (Ноль в типе файла эквивалентен типу S_IFREG.)
Если тип файла S_IFCHR или S_IFBLK, то аргумент dev задает старший (major) и младший (minor) номера создаваемого файла устройства; в остальных случаях этого аргумент игнорируется.
Если pathname уже существует или является символьной ссылкой, вызов звершится с ошибкой EEXIST.
Владелец созданного узла будет установлен соласно эффективному идентификатору пользователя процесса, из которого был выполнен вызов. Если в правах доступа к каталогу, в котором находится узел, установлен бит setgid, или если файловая система смонтирована с семантикой групп BSD, то новый узел унаследует группу-владельца от своего родительского каталога; в противном случае группой-владельцем станет группа соответствующая эффективному идентификатору группы процесса.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха mknod возвращает ноль, в случае ошибки возвращается -1 и значение errno устанавливается соответствующим образом.ОШИБКИ
- EPERM
- Аргумент mode установлен для создания чего-то отличного от обычного файла, FIFO (именованного канала) или доменного сокета Unix и вызывающий процесс не имеет прав суперпользователя; эта же ошибка возвращается, если файловая система, содержащая pathname не поддерживает затребованный тип создаваемого узла.
- EINVAL
- затребовано создание чего-то оличного от обычного файла, специального файла устройства, FIFO или сокета.
- EEXIST
- pathname уже существует.
- EFAULT
- pathname указывает за пределы доступного вам адресного пространства.
- EACCES
- Родительский каталог не разрешает запись текущему процессу или один из каталогов в pathname не разрешает поиск (выполнение).
- ENAMETOOLONG
- pathname имеет слишком большую длину.
- ENOENT
- Компонент каталога в pathname не существует или является битой символьной ссылкой.
- ENOTDIR
- Компонент, используемый как каталог в pathname не является каталогом.
- ENOMEM
- Не хватает памяти.
- EROFS
- pathname указывает на файл в файловой системе доступной только для чтения.
- ELOOP
- Слишком много символьный ссылок случилось во время анализа pathname.
- ENOSPC
- На устройстве, содержащем pathname нет свободного места для нового узла.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4 (но данный вызов требует привелегий и таким образом не входит в POSIX), 4.4BSD. Linux версия отличается от SVr4 версии в том, что не требует привелегий суперпользователя для создания каналов, а также в том, что не документируются ошибки EMULTIHOP, ENOLINK и EINTR.ЗАМЕЧАНИЯ
POSIX 1003.1-2001 говорит: "Переносимым на другие платформы использованием вызова mknod() является только создание FIFO файлов. Если mode не S_IFIFO или dev не 0, поведение mknod() является неопределённым."Под Linux данный вызов не может быть использован для создания каталогов. Для этого нужно использовать mkdir, а FIFO могут создаваться вызовом mkfifo.
Существует множество погрешностей в протоколе при использовании NFS. Некоторые из них влияют на mknod.
СМОТРИ ТАКЖЕ
fcntl(2), mkdir(2), mount(2), socket(2), stat(2), umask(2), unlink(2), mkfifo(3)ПЕРЕВОД
Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2004Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre