Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <sys/stat.h>

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

       #include <fcntl.h>           /* определения констант AT_* */
       #include <sys/stat.h>

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

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       mknod():
           _XOPEN_SOURCE >= 500
               || /* Начиная с glibc 2.19: */ _DEFAULT_SOURCE
               || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

ОПИСАНИЕ

       Системный  вызов  mknod()  создаёт  запись  (node)  в файловой системе (обычный файл, файл устройства или
       именованный канал) с именем pathname и атрибутами, заданными в mode и dev.

       В аргументе mode указывается используемый режим файла и тип создаваемого узла. В  этом  параметре  должна
       быть  битовая  комбинация  (используя  побитовое  логическое  сложение ИЛИ) нуля или более режимов файла,
       перечисленных в inode(7).

       The file mode is modified by the process's umask in the usual way: in the absence of a default  ACL,  the
       permissions of the created node are (mode & ~umask).

       Для   указания  обычного  файла,  специального  символьного  файла,  специального  блочного  файла,  FIFO
       (именованного канала) или доменного сокета UNIX типом должен быть  один  из  S_IFREG,  S_IFCHR,  S_IFBLK,
       S_IFIFO или S_IFSOCK, соответственно (нулевой тип файла эквивалентен типу S_IFREG).

       Если  тип  файла  равен  S_IFCHR  или  S_IFBLK,  то  в  dev  задаётся  основной  и вспомогательный номера
       создаваемого специального файла устройства (makedev(3) может оказаться полезной при создании значения для
       dev); в остальных случаях аргумент игнорируется.

       Если pathname уже существует, или является символьной ссылкой, то вызов завершается с ошибкой EEXIST.

       Созданный файл будет принадлежать ID эффективного владельца процесса. Если в правах доступа к каталогу, в
       котором находится файл, установлен бит set-group-ID, или если файловая система смонтирована с  семантикой
       групп BSD, то новый файл унаследует группу-владельца от своего родительского каталога; в противном случае
       группой-владельцем станет ID эффективной группы процесса.

   mknodat()
       Системный  вызов  mknodat() работает также как системный вызов mknod(), за исключением случаев, описанных
       здесь.

       Если в pathname задан относительный путь, то он считается относительно  каталога,  на  который  ссылается
       файловый  дескриптор  dirfd  (а  не относительно текущего рабочего каталога вызывающего процесса, как это
       делается в mknod()).

       Если в pathname задан относительный путь и  dirfd  равно  специальному  значению  AT_FDCWD,  то  pathname
       рассматривается относительно текущего рабочего каталога вызывающего процесса (как mknod()).

       Если в pathname задан абсолютный путь, то dirfd игнорируется.

       Смотрите в openat(2) объяснение необходимости mknodat().

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       mknod()   and  mknodat()   return zero on success.  On error, -1 is returned and errno is set to indicate
       the error.

ОШИБКИ

       EACCES У процесса нет прав на запись в родительский каталог, или в  одном  из  каталогов  в  pathname  не
              разрешён поиск (смотрите также path_resolution(7)).

       EBADF  (mknodat())  pathname is relative but dirfd is neither AT_FDCWD nor a valid file descriptor.

       EDQUOT Исчерпана пользовательская квота на дисковые блоки или иноды файловой системы.

       EEXIST pathname уже существует. В этом случае pathname может быть символьной ссылкой, повисшей или нет.

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

       EINVAL В  аргументе  mode  указано  значение, отличное от значения для обычного файла, специального файла
              устройства, FIFO или сокета.

       ELOOP  Во время определения pathname встретилось слишком много символьных ссылок.

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

       ENOENT Один из каталогов в pathname не существует или является повисшей символьной ссылкой.

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

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

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

       ENOTDIR
              (mknodat())  pathname is relative and dirfd is a file descriptor referring to a file other than  a
              directory.

       EPERM  В  аргументе  mode  запрошено  создание  чего-то,  отличного от обычного файла, специального файла
              устройства, FIFO (именованного канала) или доменного сокета UNIX, и у вызвавшего процесса нет прав
              (Linux: не  имеет  мандата  CAP_MKNOD);  также  завершается,  если  файловая  система,  содержащая
              pathname, не поддерживает тип запрашиваемой ноды.

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

ВЕРСИИ

       В POSIX.1-2001 сказано: «Единственный способ, которым можно использовать mknod() в переносимых программах
       это  создание  специального  файла  FIFO.  Если  значение  mode  не  равно S_IFIFO или dev не равно 0, то
       поведение mknod() не определено.» Однако, в настоящее время никогда не используйте mknod() для этой цели;
       вместо этого используйте функцию mkfifo(3), которая создана специально для этого.

       В Linux вызов mknod() не может использоваться для создания каталогов.  Для  этого  есть  системный  вызов
       mkdir(2).

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       mknod()
              SVr4, 4.4BSD, POSIX.1-2001 (but see VERSIONS).

       mknodat()
              Linux 2.6.16, glibc 2.4.  POSIX.1-2008.

ПРИМЕЧАНИЯ

       В  протоколе,  на  котором работает NFS, есть множество недоработок. Некоторые из них влияют на mknod() и
       mknodat().

СМОТРИТЕ ТАКЖЕ

       mknod(1), chmod(2), chown(2), fcntl(2), mkdir(2),  mount(2),  socket(2),  stat(2),  umask(2),  unlink(2),
       makedev(3), mkfifo(3), acl(5), path_resolution(7)

ПЕРЕВОД

       Русский   перевод   этой   страницы   руководства   разработал(и)   aereiae  <aereiae@gmail.com>,  Alexey
       <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>,
       Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>,  Max  Is  <ismax799@gmail.com>,
       Yuri   Kozlov   <yuray@komyakino.ru>,   Иван   Павлов  <pavia00@gmail.com>,  Малянов  Евгений  Викторович
       <maljanow@outlook.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                         mknod(2)