Provided by: manpages-ru_0.98-4_all bug

ИМЯ

       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> 2004