mknod

MKNOD(2)        Ð ÑководÑÑво пÑогÑаммиÑÑа Linux        MKNOD(2)



ÐÐЯ
       mknod, mknodat - ÑоздаÑÑ ÑпеÑиалÑнÑй или обÑÑнÑй
       Ñайл

ÐÐÐÐÐ
       #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);

       #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():
           _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 ||
           _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

ÐÐÐСÐÐÐÐ
       СиÑÑемнÑй вÑзов mknod() ÑоздаÑÑ Ð·Ð°Ð¿Ð¸ÑÑ (node) в
       Ñайловой ÑиÑÑеме (обÑÑнÑй Ñайл, Ñайл
       ÑÑÑÑойÑÑва или именованнÑй канал) Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼
       pathname и аÑÑибÑÑами, заданнÑми в mode и dev.

       РаÑгÑменÑе mode ÑказÑваеÑÑÑ Ð¸ÑполÑзÑемÑй Ñежим
       Ñайла и Ñип Ñоздаваемого Ñзла. Ð ÑÑом
       паÑамеÑÑе должна бÑÑÑ Ð±Ð¸ÑÐ¾Ð²Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°ÑиÑ
       (иÑполÑзÑÑ Ð¿Ð¾Ð±Ð¸Ñовое логиÑеÑкое Ñложение
       ÐÐÐ) нÑÐ»Ñ Ð¸Ð»Ð¸ более Ñежимов Ñайла,
       пеÑеÑиÑленнÑÑ Ð² stat(2).

       Режим Ñайла изменÑеÑÑÑ ÑоглаÑно знаÑениÑ
       umask пÑоÑеÑÑа: пÑи оÑÑÑÑÑÑвии ÑпиÑка конÑÑолÑ
       доÑÑÑпа по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñава на ÑоздаваемÑй
       Ñзел ÑÑановÑÑÑÑ ÑÐ°Ð²Ð½Ñ (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(2)).

       ÐÑли в pathname задан оÑноÑиÑелÑнÑй пÑÑÑ Ð¸ dirfd
       Ñавно ÑпеÑиалÑÐ½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ AT_FDCWD, Ñо pathname
       ÑаÑÑмаÑÑиваеÑÑÑ Ð¾ÑноÑиÑелÑно ÑекÑÑего
       ÑабоÑего каÑалога вÑзÑваÑÑего пÑоÑеÑÑа (как
       mknod(2)).

       ÐÑли в pathname задан абÑолÑÑнÑй пÑÑÑ, Ñо dirfd
       игноÑиÑÑеÑÑÑ.

       СмоÑÑиÑе в openat(2) обÑÑÑнение необÑодимоÑÑи
       mknodat().

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑи ÑÑпеÑном вÑполнении вÑзовов mknod() и
       mknodat() возвÑаÑаеÑÑÑ 0. Ð ÑлÑÑае оÑибки
       возвÑаÑаеÑÑÑ -1, а errno ÑÑÑанавливаеÑÑÑ Ð²
       ÑооÑвеÑÑÑвÑÑÑее знаÑение.

ÐШÐÐÐÐ
       EACCES У пÑоÑеÑÑа Ð½ÐµÑ Ð¿Ñав на запиÑÑ Ð²
              ÑодиÑелÑÑкий каÑалог, или в одном из
              каÑалогов в pathname не ÑазÑеÑÑн поиÑк (Ñм.
              Ñакже path_resolution(7)).

       EDQUOT ÐÑÑеÑпана полÑзоваÑелÑÑÐºÐ°Ñ ÐºÐ²Ð¾Ñа на
              диÑковÑе блоки или Ð¸Ð½Ð¾Ð´Ñ Ñайловой
              ÑиÑÑемÑ.

       EEXIST pathname Ñже ÑÑÑеÑÑвÑеÑ. Ð ÑÑом ÑлÑÑае pathname
              Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑимволÑной ÑÑÑлкой, повиÑÑей
              или неÑ.

       EFAULT ÐÑгÑÐ¼ÐµÐ½Ñ pathname ÑказÑÐ²Ð°ÐµÑ Ð·Ð° пÑеделÑ
              доÑÑÑпного адÑеÑного пÑоÑÑÑанÑÑва.

       EINVAL РаÑгÑменÑе mode Ñказано знаÑение,
              оÑлиÑное Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±ÑÑного
              Ñайла, ÑпеÑиалÑного Ñайла ÑÑÑÑойÑÑва, FIFO
              или ÑокеÑа.

       ELOOP  Ðо вÑÐµÐ¼Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ pathname вÑÑÑеÑилоÑÑ
              ÑлиÑком много ÑимволÑнÑÑ ÑÑÑлок.

       ENAMETOOLONG
              pathname ÑлиÑком длинен.

       ENOENT Ðдин из каÑалогов в pathname не ÑÑÑеÑÑвÑеÑ
              или ÑвлÑеÑÑÑ Ð¿Ð¾Ð²Ð¸ÑÑей ÑимволÑной
              ÑÑÑлкой.

       ENOMEM ÐедоÑÑаÑоÑное колиÑеÑÑво памÑÑи ÑдÑа.

       ENOSPC Ðа ÑÑÑÑойÑÑве, ÑодеÑжаÑем pathname, Ð½ÐµÑ Ð¼ÐµÑÑа
              Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑлеменÑа.

       ENOTDIR
              ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¿ÑÑи, иÑполÑзованнÑй как
              каÑалог в pathname, в дейÑÑвиÑелÑноÑÑи
              ÑаковÑм не ÑвлÑеÑÑÑ.

       EPERM  РаÑгÑменÑе mode запÑоÑено Ñоздание
              Ñего-Ñо, оÑлиÑного Ð¾Ñ Ð¾Ð±ÑÑного Ñайла,
              ÑпеÑиалÑного Ñайла ÑÑÑÑойÑÑва, FIFO
              (именованного канала) или
              доменного ÑокеÑа UNIX, и Ñ Ð²ÑзвавÑего
              пÑоÑеÑÑа Ð½ÐµÑ Ð¿Ñав (Linux: не Ð¸Ð¼ÐµÐµÑ Ð¼Ð°Ð½Ð´Ð°Ñа
              CAP_MKNOD); Ñакже завеÑÑаеÑÑÑ, еÑли ÑайловаÑ
              ÑиÑÑема, ÑодеÑжаÑÐ°Ñ pathname, не
              поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñип запÑаÑиваемой нодÑ.

       EROFS  pathname ÑказÑÐ²Ð°ÐµÑ Ð½Ð° Ñайл в Ñайловой
              ÑиÑÑеме, доÑÑÑпной ÑолÑко Ð´Ð»Ñ ÑÑениÑ.

       Ð mknodat() дополниÑелÑно могÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ
       ÑледÑÑÑие оÑибки:

       EBADF  dirfd не ÑвлÑеÑÑÑ Ð¿ÑавилÑнÑм ÑайловÑм
              деÑкÑипÑоÑом.

       ENOTDIR
              ÐнаÑение pathname ÑодеÑÐ¶Ð¸Ñ Ð¾ÑноÑиÑелÑнÑй
              пÑÑÑ Ð¸ dirfd ÑодеÑÐ¶Ð¸Ñ ÑайловÑй деÑкÑипÑоÑ,
              ÑказÑваÑÑий на Ñайл, а не на каÑалог.

ÐÐРСÐÐ
       ÐÑзов mknodat() бÑл добавлен в ÑдÑо Linux веÑÑии
       2.6.16; поддеÑжка в glibc доÑÑÑпна Ñ Ð²ÐµÑÑии 2.4.

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       mknod(): SVr4, 4.4BSD, POSIX.1-2001 (но ÑмоÑÑиÑе ниже),
       POSIX.1-2008.

       mknodat(): POSIX.1-2008.

ÐÐÐÐЧÐÐÐЯ
       Ð POSIX.1-2001 Ñказано: «ÐдинÑÑвеннÑй ÑпоÑоб,
       коÑоÑÑм можно иÑполÑзоваÑÑ mknod() в
       пеÑеноÑимÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ð°Ñ ÑÑо Ñоздание
       ÑпеÑиалÑного Ñайла FIFO. ÐÑли знаÑение mode не
       Ñавно S_IFIFO или dev не Ñавно 0, Ñо поведение
       mknod() не опÑеделено.» Ðднако, в наÑÑоÑÑее
       вÑÐµÐ¼Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не иÑполÑзÑйÑе mknod() Ð´Ð»Ñ ÑÑой
       Ñели; вмеÑÑо ÑÑого иÑполÑзÑйÑе ÑÑнкÑÐ¸Ñ mkfifo(3),
       коÑоÑÐ°Ñ Ñоздана ÑпеÑиалÑно Ð´Ð»Ñ ÑÑого.

       Ð Linux вÑзов mknod() не Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ
       ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ°Ñалогов. ÐÐ»Ñ ÑÑого еÑÑÑ ÑиÑÑемнÑй
       вÑзов mkdir(2).

       РпÑоÑоколе, на коÑоÑом ÑабоÑÐ°ÐµÑ NFS, еÑÑÑ
       множеÑÑво недоÑабоÑок. ÐекоÑоÑÑе из ниÑ
       влиÑÑÑ Ð½Ð° mknod() и mknodat(2).

СÐÐТРÐТРТÐÐÐÐ
       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)



Linux                             2015-05-07                          MKNOD(2)