.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" This manpage is Copyright (C) 1992 Drew Eckhardt; .\" 1993 Michael Haardt .\" 1993,1994 Ian Jackson. .\" You may distribute it under the terms of the GNU General .\" Public Licence. It comes with NO WARRANTY. .\" .\" Tiny fix by urs - 960818 .\" Improvements by Michael Kerrisk - 2003-04-23 .\" .\" Дата последней коррекции перевода 14.06.2004 .\" Перевод с английского сделал Виктор Вислобоков .\" http://www.linuxshare.ru/projects/trans/mans.html .\" .TH MKNOD 2 2003-04-23 "Linux 2.4" "Руководство Программиста Linux" .SH ИМЯ mknod \- создать специальный или обычный файл .SH ОБЗОР .nf .B #include .B #include .B #include .B #include .sp .BI "int mknod(const char *" pathname ", mode_t " mode ", dev_t " dev ); .fi .SH ОПИСАНИЕ Системный вызов .B mknod создаёт узел файловой системы (файл, специальный файл устройства или именованный канал) с именем .IR pathname и с атрибутами, которые задаются через .I mode и .IR dev . Аргумент .I mode задает как права доступа, так и тип узла, который нужно создать. Аргумент должен быть комбинацией (битовое сложение OR) одного из нижеперечисленных типов файлов и прав доступа для нового узла. Права доступа изменяются значением .BR umask процесса в обычном порядке: права создаваемого узла будут .BR "(mode & ~umask)" . Тип файла должен быть одним из значений: .BR S_IFREG , .BR S_IFCHR , .BR S_IFBLK , .BR S_IFIFO или .BR S_IFSOCK .\" (S_IFSOCK since Linux 1.2.4) которые опрделяют соответственно обычный файл (который будет создан пустым), специальный символьный файл, специальный блочный файл, FIFO (именованный канал) или доменный сокет Unix. (Ноль в типе файла эквивалентен типу S_IFREG.) Если тип файла .BR S_IFCHR " или " S_IFBLK , то аргумент .I dev задает старший (major) и младший (minor) номера создаваемого файла устройства; в остальных случаях этого аргумент игнорируется. Если .I pathname уже существует или является символьной ссылкой, вызов звершится с ошибкой EEXIST. Владелец созданного узла будет установлен соласно эффективному идентификатору пользователя процесса, из которого был выполнен вызов. Если в правах доступа к каталогу, в котором находится узел, установлен бит setgid, или если файловая система смонтирована с семантикой групп BSD, то новый узел унаследует группу-владельца от своего родительского каталога; в противном случае группой-владельцем станет группа соответствующая эффективному идентификатору группы процесса. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" В случае успеха .BR mknod возвращает ноль, в случае ошибки возвращается \-1 и значение .I errno устанавливается соответствующим образом. .SH ОШИБКИ .TP .B EPERM Аргумент .I mode установлен для создания чего-то отличного от обычного файла, FIFO (именованного канала) или доменного сокета Unix и вызывающий процесс не имеет прав суперпользователя; эта же ошибка возвращается, если файловая система, содержащая .I pathname не поддерживает затребованный тип создаваемого узла. .TP .B EINVAL затребовано создание чего-то оличного от обычного файла, специального файла устройства, FIFO или сокета. .TP .B EEXIST .I pathname уже существует. .TP .B EFAULT .IR pathname " указывает за пределы доступного вам адресного пространства." .TP .B EACCES Родительский каталог не разрешает запись текущему процессу или один из каталогов в .IR pathname не разрешает поиск (выполнение). .TP .B ENAMETOOLONG .IR pathname " имеет слишком большую длину." .TP .B ENOENT Компонент каталога в .I pathname не существует или является битой символьной ссылкой. .TP .B ENOTDIR Компонент, используемый как каталог в .I pathname не является каталогом. .TP .B ENOMEM Не хватает памяти. .TP .B EROFS .I pathname указывает на файл в файловой системе доступной только для чтения. .TP .B ELOOP Слишком много символьный ссылок случилось во время анализа .IR pathname . .TP .B ENOSPC На устройстве, содержащем .I pathname нет свободного места для нового узла. .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" SVr4 (но данный вызов требует привелегий и таким образом не входит в POSIX), 4.4BSD. Linux версия отличается от SVr4 версии в том, что не требует привелегий суперпользователя для создания каналов, а также в том, что не документируются ошибки EMULTIHOP, ENOLINK и EINTR. .SH ЗАМЕЧАНИЯ POSIX 1003.1-2001 говорит: "Переносимым на другие платформы использованием вызова .BR mknod () является только создание FIFO файлов. Если .I mode не S_IFIFO или .I dev не 0, поведение .BR mknod () является неопределённым." Под Linux данный вызов не может быть использован для создания каталогов. Для этого нужно использовать .BR mkdir , а FIFO могут создаваться вызовом .BR mkfifo . .\" Unix domain sockets with .BR socket " (and " bind ), Существует множество погрешностей в протоколе при использовании NFS. Некоторые из них влияют на .BR mknod . .SH "СМОТРИ ТАКЖЕ" .BR fcntl (2), .BR mkdir (2), .BR mount (2), .BR socket (2), .BR stat (2), .BR umask (2), .BR unlink (2), .BR mkfifo (3) .SH ПЕРЕВОД Перевёл с английского Виктор Вислобоков 2004