open

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



ÐÐЯ
       open, openat, creat - оÑкÑÑÐ²Ð°ÐµÑ Ð¸, возможно, ÑоздаÑÑ
       Ñайл

ÐÐÐÐÐ
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode);

       int creat(const char *pathname, mode_t mode);

       int openat(int dirfd, const char *pathname, int flags);
       int openat(int dirfd, const char *pathname, int flags, mode_t mode);

   ТÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÑоÑа ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑв Ð´Ð»Ñ glibc
   (Ñм. feature_test_macros(7)):

       openat():
           ÐаÑÐ¸Ð½Ð°Ñ Ñ glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Ðо glibc 2.10:
               _ATFILE_SOURCE

ÐÐÐСÐÐÐÐ
       ÐолÑÑив в pathname Ð¸Ð¼Ñ Ñайла, open() возвÑаÑаеÑ
       ÑайловÑй деÑкÑипÑÐ¾Ñ — неболÑÑое,
       неоÑÑиÑаÑелÑное знаÑение — длÑ
       иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² поÑледÑÑÑÐ¸Ñ ÑиÑÑемнÑÑ Ð²ÑзоваÑ
       (read(2), write(2), lseek(2), fcntl(2) и Ñ.д.). ФайловÑй
       деÑкÑипÑоÑ, возвÑаÑаемÑй пÑи ÑÑпеÑном
       вÑполнении вÑзова, бÑÐ´ÐµÑ ÑамÑм маленÑким
       ÑиÑлом из ÑайловÑÑ Ð´ÐµÑкÑипÑоÑов, коÑоÑÑе еÑÑ
       не оÑкÑÑÑÑ Ð¿ÑоÑеÑÑом.

       Ðо ÑмолÑаниÑ, новÑй ÑайловÑй деÑкÑипÑоÑ
       оÑÑаÑÑÑÑ Ð¾ÑкÑÑÑÑм пÑи вÑзове execve(2) (Ñ. е., Ñлаг
       FD_CLOEXEC Ñайлового деÑкÑипÑоÑа, опиÑаннÑй в
       fcntl(2), изнаÑалÑно ÑбÑоÑен; Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ
       Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ
       Ñлаг O_CLOEXEC, он опиÑан далее). Файловое
       ÑмеÑение ÑÑÑанавливаеÑÑÑ Ð½Ð° наÑало Ñайла
       (Ñм. lseek(2)).

       ÐÑзов open() ÑоздаÑÑ Ð½Ð¾Ð²Ð¾Ðµ оÑкÑÑÑое Ñайловое
       опиÑание â запиÑÑ Ð² ÑиÑÑемной ÑаблиÑе оÑкÑÑÑÑÑ
       Ñайлов. Ð ÑÑой запиÑи ÑÑаниÑÑÑ ÑмеÑение и
       Ñлаги ÑоÑÑоÑÐ½Ð¸Ñ Ñайла (ÑмоÑÑиÑе ниже).
       ФайловÑй деÑкÑипÑÐ¾Ñ â ÑÑо ÑÑÑлка на оÑкÑÑÑое
       Ñайловое опиÑание; Ñ ÑÑой ÑÑÑлкой ниÑего не
       пÑоиÑÑÐ¾Ð´Ð¸Ñ Ð¿Ñи поÑледÑÑÑем Ñдалении pathname
       или пеÑеÑказании имени на дÑÑгой Ñайл.
       ÐополниÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑкÑÑÑÑÑ ÑайловÑÑ
       опиÑаниÑÑ ÑмоÑÑиÑе в Ñазделе ÐÐÐÐЧÐÐÐЯ.

       ÐаÑамеÑÑ flags должен ÑодеÑжаÑÑ Ð¾Ð´Ð¸Ð½ из
       ÑледÑÑÑÐ¸Ñ Ñежимов доÑÑÑпа: O_RDONLY (ÑолÑко длÑ
       ÑÑениÑ), O_WRONLY (ÑолÑко Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи) или O_RDWR
       (Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ запиÑи).

       Также в flags можно ÑказÑваÑÑ Ñлаги ÑозданиÑ
       и ÑоÑÑоÑÐ½Ð¸Ñ Ñайла, обÑединÑÑ Ð¸Ñ Ð±Ð¸Ñовой
       опеÑаÑией ÐÐÐ. Флаги ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайла: O_CLOEXEC,
       O_CREAT, O_DIRECTORY, O_EXCL, O_NOCTTY, O_NOFOLLOW, O_TMPFILE и
       O_TRUNC. Флаги ÑоÑÑоÑÐ½Ð¸Ñ Ñайла â вÑе оÑÑавÑиеÑÑ,
       пеÑеÑиÑÐ»ÐµÐ½Ñ Ð½Ð¸Ð¶Ðµ. РазлиÑие Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑмÑ
       ÑÑими гÑÑппами в Ñом, ÑÑо Ñлаги ÑоÑÑоÑниÑ
       можно запÑоÑиÑÑ Ð¸ (в некоÑоÑÑÑ ÑлÑÑаÑÑ)
       измениÑÑ; ÑмоÑÑиÑе fcntl(2).

       ÐолнÑй ÑпиÑок Ñлагов ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ Ñлагов
       ÑоÑÑоÑÐ½Ð¸Ñ Ñайла:

       O_APPEND
              Файл оÑкÑÑваеÑÑÑ Ð² Ñежиме добавлениÑ.
              ÐеÑед каждÑм вÑзовом write(2) Ñайловое
              ÑмеÑение ÑÑÑанавливаеÑÑÑ Ð² ÐºÐ¾Ð½ÐµÑ Ñайла,
              как еÑли Ð±Ñ ÑÑо делалоÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ lseek(2).
              Флаг O_APPEND Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº
              повÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ñайлов в ÑайловÑÑ ÑиÑÑемаÑ
              NFS, еÑли одновÑеменно добавлÑÑÑ Ð´Ð°Ð½Ð½Ñе
              в Ñайл неÑколÑко пÑоÑеÑÑов. ÐÑо
              пÑоиÑÑÐ¾Ð´Ð¸Ñ Ð¸Ð·-за Ñого, ÑÑо NFS не
              поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ в Ñайл,
              поÑÑÐ¾Ð¼Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑкое ÑдÑо имиÑиÑÑÐµÑ Ñакое
              поведение, но пÑи ÑÑом нелÑÐ·Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ
              ÑоÑÑÑзаÑелÑноÑÑи пÑоÑеÑÑов.

       O_ASYNC
              ÐклÑÑÐ°ÐµÑ Ð²Ð²Ð¾Ð´-вÑвод, ÑпÑавлÑемÑй
              Ñигналом: генеÑиÑÑÐµÑ Ñигнал (по
              ÑмолÑÐ°Ð½Ð¸Ñ SIGIO, но можно измениÑÑ Ñ
              помоÑÑÑ fcntl(2)), когда ÑÑановиÑÑÑ
              возможнÑм ввод или вÑвод Ð´Ð»Ñ ÑÑого
              Ñайлового деÑкÑипÑоÑа. ÐÑа возможноÑÑÑ
              доÑÑÑпна ÑолÑко Ð´Ð»Ñ ÑеÑминалов,
              пÑевдоÑеÑминалов, ÑокеÑов, каналов
              (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6) и FIFO. ÐодÑобней
              ÑмоÑÑиÑе fcntl(2). Также ÑмоÑÑиÑе ÐÐФÐÐТЫ
              далее.

       O_CLOEXEC (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.23)
              УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñлаг close-on-exec на новом
              Ñайловом деÑкÑипÑоÑе. Указание
              данного Ñлага позволÑÐµÑ Ð¿ÑогÑамме
              избежаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной опеÑаÑии
              fcntl(2) F_SETFD Ð´Ð»Ñ ÑÑÑановки Ñлага FD_CLOEXEC.

              ÐамеÑим, ÑÑо иÑполÑзование ÑÑого Ñлага
              обÑзаÑелÑно Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾Ð½Ð¸ÑиевÑÑ
              пÑогÑамм, Ñак как иÑполÑзование
              оÑделÑной опеÑаÑии fcntl(2) F_SETFD длÑ
              ÑÑÑановки Ñлага FD_CLOEXEC недоÑÑаÑоÑно длÑ
              Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ ÑоÑÑÑзаÑелÑноÑÑи, когда одна
              ниÑÑ Ð¾ÑкÑÑÐ²Ð°ÐµÑ ÑайловÑй деÑкÑипÑоÑ, а в
              Ñоже вÑÐµÐ¼Ñ Ð´ÑÑÐ³Ð°Ñ Ð½Ð¸ÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑ
              fork(2) и execve(2). РзавиÑимоÑÑи Ð¾Ñ Ð¿Ð¾ÑÑдка
              вÑполнениÑ, ÑоÑÑÑзаÑелÑноÑÑÑ Ð¼Ð¾Ð¶ÐµÑ
              пÑивеÑÑи к ÑомÑ, ÑÑо ÑайловÑй деÑкÑипÑоÑ,
              возвÑаÑÑннÑй open(), бÑÐ´ÐµÑ Ð½ÐµÐ½Ð°Ð¼ÐµÑенно
              пеÑедан пÑогÑамме, вÑполнÑÑÑейÑÑ Ð²
              Ñозданном Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ fork(2) поÑомке
              (Ñакого Ñода ÑоÑÑÑзаÑелÑноÑÑÑ, в пÑинÑипе,
              возможна Ð´Ð»Ñ Ð»ÑбÑÑ ÑиÑÑемнÑÑ Ð²Ñзовов,
              ÑоздаÑÑÐ¸Ñ ÑайловÑй деÑкÑипÑоÑ, Ñ ÐºÐ¾ÑоÑого
              должен бÑÑÑ ÑÑÑановлен Ñлаг close-on-exec, и
              ÑазлиÑнÑе дÑÑгие ÑиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ Linux
              пÑедоÑÑавлÑÑÑ ÑÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ ÑÐ»Ð°Ð³Ñ O_CLOEXEC,
              ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑой пÑоблемÑ).

       O_CREAT
              ÐÑли Ñайл не ÑÑÑеÑÑвÑеÑ, Ñо он бÑдеÑ
              Ñоздан.

              ÐладелÑÑем (ID полÑзоваÑелÑ) нового
              Ñайла назнаÑаеÑÑÑ ÑÑÑекÑивнÑй
              иденÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¿ÑоÑеÑÑа.

              ÐÑÑппой владелÑÑев (ID гÑÑппÑ) нового
              Ñайла назнаÑаеÑÑÑ ÑÑÑекÑивнÑй
              иденÑиÑикаÑÐ¾Ñ Ð³ÑÑÐ¿Ð¿Ñ Ð¿ÑоÑеÑÑа (ÑоглаÑно
              System V) или ID гÑÑÐ¿Ð¿Ñ ÑодиÑелÑÑкого
              каÑалога (ÑоглаÑно BSD). Ð Linux ÑÑо завиÑиÑ
              Ð¾Ñ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð±Ð¸Ñа Ñежима set-group-ID на
              ÑодиÑелÑÑком каÑалоге: еÑли ÑÑÐ¾Ñ Ð±Ð¸Ñ
              ÑÑÑановлен, Ñо иÑполÑзÑеÑÑÑ Ð¿Ñавило BSD; в
              пÑоÑивном ÑлÑÑае пÑименÑеÑÑÑ Ð¿Ñавило
              System V. РнекоÑоÑÑÑ ÑайловÑÑ ÑиÑÑемаÑ
              поведение Ñакже завиÑÐ¸Ñ Ð¾Ñ Ð¿Ð°ÑамеÑÑов
              монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ bsdgroups и sysvgroups, опиÑаннÑÑ
              в mount(8)).

              РаÑгÑменÑе mode ÑказÑваÑÑÑÑ Ð±Ð¸ÑÑ Ñайлового
              Ñежима, коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð¿Ñи Ñоздании
              нового Ñайла. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½
              ÑказÑваÑÑÑÑ, еÑли в flags ÑÑÑанавливаеÑÑÑ
              O_CREAT или O_TMPFILE; еÑли O_CREAT или O_TMPFILE не
              ÑказанÑ, Ñо mode игноÑиÑÑеÑÑÑ. ÐÑÑекÑивнÑй
              Ñежим изменÑеÑÑÑ ÑоглаÑно umask пÑоÑеÑÑа
              как обÑÑно: в ÑлÑÑае оÑÑÑÑÑÑÐ²Ð¸Ñ ÑпиÑков
              доÑÑÑпа по ÑмолÑÐ°Ð½Ð¸Ñ Ñежим Ñозданного
              Ñайла бÑÐ´ÐµÑ ÑÑÑановлен ÑоглаÑно
              (mode & ~umask). ÐамеÑим, ÑÑо ÑÑÐ¾Ñ Ñежим бÑдеÑ
              ÑÑÑÑн ÑолÑко пÑи поÑледÑÑÑÐ¸Ñ Ð¾Ð±ÑаÑениÑÑ Ðº
              ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÑайлÑ; вÑзов open(), ÑоздаÑÑий
              Ñайл ÑолÑко Ð´Ð»Ñ ÑÑениÑ, Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ
              ÑайловÑй деÑкÑипÑÐ¾Ñ Ð´Ð¾ÑÑÑпнÑй на ÑÑение
              и запиÑÑ.

              СимволÑнÑе конÑÑанÑÑ, иÑполÑзÑемÑе в mode:

              S_IRWXU  00700 полÑзоваÑÐµÐ»Ñ (Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ñайла)
                       Ð¸Ð¼ÐµÐµÑ Ð¿Ñава на ÑÑение, запиÑÑ Ð¸
                       вÑполнение Ñайла

              S_IRUSR  00400 полÑзоваÑÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ Ð¿Ñава на
                       ÑÑение Ñайла

              S_IWUSR  00200 полÑзоваÑÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ Ð¿Ñава на
                       запиÑÑ Ð² Ñайл

              S_IXUSR  00100 полÑзоваÑÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ Ð¿Ñава на
                       вÑполнение Ñайла

              S_IRWXG  00070 гÑÑппа Ð¸Ð¼ÐµÐµÑ Ð¿Ñава на ÑÑение,
                       запиÑÑ Ð¸ вÑполнение Ñайла

              S_IRGRP  00040 гÑÑппа Ð¸Ð¼ÐµÐµÑ Ð¿Ñава на ÑÑение
                       Ñайла

              S_IWGRP  00020 гÑÑппа Ð¸Ð¼ÐµÐµÑ Ð¿Ñава на запиÑÑ Ð²
                       Ñайл

              S_IXGRP  00010 гÑÑппа Ð¸Ð¼ÐµÐµÑ Ð¿Ñава на
                       вÑполнение Ñайла

              S_IRWXO  00007 вÑе оÑÑалÑнÑе имеÑÑ Ð¿Ñава на
                       ÑÑение, запиÑÑ Ð¸ вÑполнение Ñайла

              S_IROTH  00004 вÑе оÑÑалÑнÑе имеÑÑ Ð¿Ñава на
                       ÑÑение Ñайла

              S_IWOTH  00002 вÑе оÑÑалÑнÑе имеÑÑ Ð¿Ñава на
                       запиÑÑ Ð² Ñайл

              S_IXOTH  00001 вÑе оÑÑалÑнÑе имеÑÑ Ð¿Ñава на
                       вÑполнение Ñайла

              СоглаÑно POSIX, в ÑлÑÑае, еÑли в mode
              ÑÐºÐ°Ð·Ð°Ð½Ñ Ð´ÑÑгие биÑÑ, Ð¸Ñ Ð²Ð¾Ð·Ð´ÐµÐ¹ÑÑвие не
              опÑеделено. Ð Linux Ð´Ð»Ñ mode Ñакже доÑÑÑпнÑ
              ÑледÑÑÑие биÑÑ:

              S_ISUID  0004000 Ð±Ð¸Ñ set-user-ID

              S_ISGID  0002000 Ð±Ð¸Ñ set-group-ID bit (Ñм. stat(2))

              S_ISVTX  0001000 закÑеплÑÑÑий Ð±Ð¸Ñ (Ñм. stat(2))

       O_DIRECT (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.4.10)
              ÐопÑÑаÑÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð¸Ð·Ð¸ÑоваÑÑ Ð²Ð»Ð¸Ñние
              кÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð²Ð¾Ð´Ð°-вÑвода пÑи ÑÑении и
              запиÑи в Ñайл. ÐбÑÑно, ÑÑо ÑÑÑдÑаеÑ
              пÑоизводиÑелÑноÑÑÑ, но полезно длÑ
              оÑобÑÑ ÑлÑÑаев, напÑимеÑ, когда
              пÑиложение вÑполнÑÐµÑ ÐºÑÑиÑование
              ÑамоÑÑоÑÑелÑно. ФайловÑй ввод-вÑвод
              вÑполнÑеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно в/из бÑÑеÑов
              пÑоÑÑÑанÑÑва полÑзоваÑелÑ. ÐÑи Ñлаге
              O_DIRECT пÑедпÑинимаÑÑÑÑ Ð²Ñе ÑÑÐ¸Ð»Ð¸Ñ Ð´Ð»Ñ
              ÑинÑÑонной пеÑедаÑи даннÑÑ, но ÑÑо не
              гаÑанÑиÑÑеÑ, как Ñ Ñлагом O_SYNC, пеÑедаÑÑ
              даннÑÑ Ð¸ необÑодимÑÑ Ð¼ÐµÑаданнÑÑ. ЧÑобÑ
              гаÑанÑиÑоваÑÑ ÑинÑÑоннÑй ввод-вÑвод
              вмеÑÑе Ñ O_DIRECT нÑжно иÑполÑзоваÑÑ O_SYNC.
              ÐалÑнейÑее опиÑание ÑмоÑÑиÑе далее в
              Ñазделе ÐÐÐÐЧÐÐÐЯ.

              СеманÑиÑеÑки поÑожий инÑеÑÑÐµÐ¹Ñ (но
              ÑÑÑаÑевÑий) Ð´Ð»Ñ Ð±Ð»Ð¾ÑнÑÑ ÑÑÑÑойÑÑв опиÑан в
              raw(8).

       O_DIRECTORY
              ÐÑли pathname не ÑвлÑеÑÑÑ ÐºÐ°Ñалогом, Ñо
              завеÑÑиÑÑ Ð²Ñзов Ñ Ð¾Ñибкой. ÐÑÐ¾Ñ Ñлаг бÑл
              добавлен в ÑдÑо веÑÑии 2.1.126, ÑÑобÑ
              избежаÑÑ Ð¿Ñоблем Ñ Â«Ð¾Ñказом в
              обÑлÑживании», еÑли opendir(3) бÑл вÑзван
              Ð´Ð»Ñ ÐºÐ°Ð½Ð°Ð»Ð° FIFO или ленÑоÑного
              ÑÑÑÑойÑÑва.

       O_DSYNC
              ÐпеÑаÑии запиÑи Ñайла бÑдÑÑ Ð²ÑполненÑ
              ÑоглаÑно ÑÑебованиÑм ÑелоÑÑноÑÑи
              ÑинÑÑонизаÑии ввода-вÑвода data.

              РвÑемени возвÑаÑа из write(2) (и подобнÑÑ)
              вÑÑоднÑе даннÑе Ñже пеÑÐµÐ´Ð°Ð½Ñ Ð²
              задейÑÑвованное аппаÑаÑное
              обеÑпеÑение вмеÑÑе Ñо вÑеми
              меÑаданнÑми Ñайла, коÑоÑÑе бÑ
              поÑÑебовалиÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ (Ñ. е.,
              как еÑли Ð±Ñ Ð·Ð° каждÑм write(2) бÑл
              вÑполнен вÑзов fdatasync(2)). СмоÑÑиÑе
              ÐÐÐÐЧÐÐÐЯ далее.

       O_EXCL ÐаÑанÑиÑÑеÑ, ÑÑо вÑзов ÑоздаÑÑ Ñайл: еÑли
              ÑÑÐ¾Ñ Ñлаг Ñказан вмеÑÑе Ñ O_CREAT и pathname Ñже
              ÑÑÑеÑÑвÑеÑ, Ñо open() завеÑÑиÑÑÑ Ñ Ð¾Ñибкой.

              ÐÑи иÑполÑзовании Ð¾Ð±Ð¾Ð¸Ñ Ñлагов
              ÑимволÑнÑе ÑÑÑлки не поддеÑживаÑÑÑÑ:
              еÑли pathname ÑвлÑеÑÑÑ ÑимволÑной ÑÑÑлкой, Ñо
              open() завеÑÑаеÑÑÑ Ñ Ð¾Ñибкой незавиÑимо оÑ
              Ñого, кÑда ÑказÑÐ²Ð°ÐµÑ ÑÑÑлка.

              ÐообÑе говоÑÑ, поведение Ñ O_EXCL не
              опÑеделено, еÑли ÑÑÐ¾Ñ Ñлаг иÑполÑзÑеÑÑÑ
              без O_CREAT. ÐÑÑÑ Ð¾Ð´Ð½Ð¾ иÑклÑÑение: в Linux 2.6 и
              более новÑÑ O_EXCL можно иÑполÑзоваÑÑ
              без O_CREAT, еÑли pathname ÑказÑÐ²Ð°ÐµÑ Ð½Ð°
              блоÑное ÑÑÑÑойÑÑво. ÐÑли блоÑное
              ÑÑÑÑойÑÑво иÑполÑзÑеÑÑÑ Ð² ÑиÑÑеме
              (напÑимеÑ, ÑмонÑиÑовано), Ñо open()
              завеÑÑиÑÑÑ Ñ Ð¾Ñибкой EBUSY.

              Флаг O_EXCL поддеÑживаеÑÑÑ Ð´Ð»Ñ NFS ÑолÑко,
              еÑли иÑполÑзÑеÑÑÑ NFSv3 или новее Ñ ÑдÑом
              2.6 или новее. Ð ÑÑедаÑ, где в NFS неÑ
              поддеÑжки O_EXCL, пÑогÑаммÑ, коÑоÑÑе
              полагаÑÑÑÑ Ð½Ð° ÑÑо Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ
              блокиÑовок, бÑдÑÑ ÑоздаваÑÑ
              ÑоÑÑÑзаÑелÑноÑÑÑ Ð¿ÑоÑеÑÑов. ÐеÑеноÑимÑм
              пÑогÑаммам, коÑоÑÑм нÑжно пÑоизвеÑÑи
              аÑомаÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ñайла Ñ Ð¿Ð¾Ð¼Ð¾ÑÑ
              Ñайла блокиÑовки, необÑодимо
              избегаÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи Ð¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки в NFS
              Ñлага O_EXCL. РкаÑеÑÑве ÑеÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾
              ÑоздаÑÑ ÑникалÑнÑй Ñайл в Ñой же
              Ñайловой ÑиÑÑеме (напÑимеÑ, добавив
              Ð¸Ð¼Ñ Ñзла и PID в название), ÑÑÐ¾Ð±Ñ ÑоздаÑÑ
              ÑÑÑÐ»ÐºÑ Ð½Ð° Ñайл блокиÑовки Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ link(2).
              ÐÑли link(2) возвÑаÑÐ°ÐµÑ 0, Ñо блокиÑовка
              вÑполнена. РпÑоÑивном ÑлÑÑае
              иÑполÑзÑйÑе stat(2), ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо
              колиÑеÑÑво ÑÑÑлок на ÑникалÑнÑй Ñайл
              возÑоÑло до двÑÑ. ÐÑо Ñакже ознаÑаеÑ, ÑÑо
              блокиÑовка бÑла ÑÑпеÑной.

       O_LARGEFILE
              (LFS) ÐозволÑÐµÑ Ð¾ÑкÑÑваÑÑ ÑайлÑ, Ñей ÑазмеÑ
              нелÑÐ·Ñ Ð¿ÑедÑÑавиÑÑ Ñипом off_t (но можно
              пÑедÑÑавиÑÑ Ñипом off64_t). ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑениÑ
              ÑÑого опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ñказан
              макÑÐ¾Ñ _LARGEFILE64_SOURCE (до вклÑÑениÑ
              какого-либо заголовоÑного Ñайла).
              УÑÑановка макÑоÑа ÑеÑÑиÑованиÑ
              возможноÑÑей _FILE_OFFSET_BITS в знаÑение 64
              (вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ O_LARGEFILE) ÑвлÑеÑÑÑ
              пÑедпоÑÑиÑелÑнÑм меÑодом доÑÑÑпа к
              болÑÑим Ñайлам на 32-биÑнÑÑ ÑиÑÑÐµÐ¼Ð°Ñ (Ñм.
              feature_test_macros(7)).

       O_NOATIME (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.8)
              Ðе обновлÑÑÑ Ð²ÑÐµÐ¼Ñ Ð¿Ð¾Ñледнего доÑÑÑпа к
              ÑÐ°Ð¹Ð»Ñ (st_atime в иноде) пÑи вÑзове read(2)
              Ð´Ð»Ñ Ñайла.

              ÐÑÐ¾Ñ Ñлаг Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко,
              еÑли ÑдовлеÑвоÑÑеÑÑÑ Ð¾Ð´Ð½Ð¾ из ÑледÑÑÑиÑ
              ÑÑловий:

              *  ÐÑÑекÑивнÑй полÑзоваÑелÑÑкий
                 иденÑиÑикаÑÐ¾Ñ Ð¿ÑоÑеÑÑа ÑовпадаеÑ
                 иденÑиÑикаÑоÑом владелÑÑа Ñайла.

              *  ÐÑзÑваÑÑий пÑоÑеÑÑ Ð¸Ð¼ÐµÐµÑ Ð¼Ð°Ð½Ð´Ð°Ñ CAP_FOWNER
                 в ÑвоÑм полÑзоваÑелÑÑком пÑоÑÑÑанÑÑве
                 имÑн и UID владелÑÑа Ñайла оÑобÑажÑн в
                 пÑоÑÑÑанÑÑве имÑн.

              ÐÑÐ¾Ñ Ñлаг пÑедназнаÑен длÑ
              иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² пÑогÑаммаÑ
              индекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑезеÑвного
              копиÑованиÑ; он позволÑÐµÑ Ð·Ð½Ð°ÑиÑелÑно
              ÑокÑаÑиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво обÑаÑений к диÑкÑ.
              Флаг Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ ÑÑÑекÑивен на
              некоÑоÑÑÑ ÑайловÑÑ ÑиÑÑемаÑ. ÐапÑимеÑ, на
              NFS, где запиÑÑ Ð²Ñемени доÑÑÑпа
              вÑполнÑеÑÑÑ ÑеÑвеÑом.

       O_NOCTTY
              ÐÑли pathname ÑказÑÐ²Ð°ÐµÑ Ð½Ð° ÑеÑминалÑное
              ÑÑÑÑойÑÑво (Ñм. tty(4)), Ñо оно не ÑÑанеÑ
              ÑпÑавлÑÑÑим ÑеÑминалом пÑоÑеÑÑа, даже
              еÑли пÑоÑеÑÑ Ñакового не имееÑ.

       O_NOFOLLOW
              ÐÑли pathname ÑвлÑеÑÑÑ ÑимволÑной ÑÑÑлкой, Ñо
              оÑкÑÑÑие завеÑÑиÑÑÑ Ð½ÐµÑдаÑно. ÐÑо
              ÑаÑÑиÑение FreeBSD, коÑоÑое бÑло
              добавлено в Linux веÑÑии 2.1.126. ÐÑе пÑоÑие
              ÑимволÑнÑе ÑÑÑлки в имени бÑдÑÑ
              обÑабоÑÐ°Ð½Ñ ÐºÐ°Ðº обÑÑно. Также ÑмоÑÑиÑе
              опиÑание O_PATH далее.

       O_NONBLOCK или O_NDELAY
              ÐÑли возможно, Ñайл оÑкÑÑваеÑÑÑ Ð²
              неблокиÑÑÑÑем Ñежиме. Ðи open(), ни дÑÑгие
              поÑледÑÑÑие опеÑаÑии над возвÑаÑаемÑм
              деÑкÑипÑоÑом Ñайла не заÑÑавÑÑ
              вÑзÑваÑÑий пÑоÑеÑÑ Ð¶Ð´Ð°ÑÑ.

              ÐбÑаÑиÑе внимание, ÑÑо ÑÑÐ¾Ñ Ñлаг не
              оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸ÑÐ½Ð¸Ñ Ð½Ð° обÑÑнÑе ÑÐ°Ð¹Ð»Ñ Ð¸
              блоÑнÑе ÑÑÑÑойÑÑва, Ñо еÑÑÑ Ð¾Ð¿ÐµÑаÑии
              ввода-вÑвода бÑдÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ Ð½Ð°
              коÑоÑкое вÑемÑ, еÑли бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑоÑено
              акÑивноÑÑÑ ÑÑÑÑойÑÑва, вне завиÑимоÑÑи оÑ
              ÑÑÑановки Ñлага O_NONBLOCK. СеманÑика
              O_NONBLOCK Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ¾Ð³Ð´Ð°-нибÑдÑ
              Ñеализована, поÑÑÐ¾Ð¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ
              Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовок пÑи
              Ñказании данного Ñлага Ð´Ð»Ñ Ð¾Ð±ÑÑнÑÑ
              Ñайлов и блоÑнÑÑ ÑÑÑÑойÑÑв.

              ÐÐ»Ñ ÑабоÑÑ Ñ ÐºÐ°Ð½Ð°Ð»Ð°Ð¼Ð¸ FIFO Ñакже ÑмоÑÑиÑе
              fifo(7). ÐбÑÑждение влиÑÐ½Ð¸Ñ O_NONBLOCK в
              ÑоÑеÑании Ñ Ð¾Ð±ÑзаÑелÑной Ñайловой
              блокиÑовкой или аÑендой (lease) ÑмоÑÑиÑе
              в fcntl(2).

       O_PATH (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.39)
              ÐолÑÑиÑÑ ÑайловÑй деÑкÑипÑоÑ, коÑоÑÑй
              можно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð´Ð²ÑÑ Ñелей: длÑ
              ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² деÑеве Ñайловой
              ÑиÑÑÐµÐ¼Ñ Ð¸ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑий,
              ÑабоÑаÑÑÐ¸Ñ Ð¸ÑклÑÑиÑелÑно на ÑÑовне
              ÑайловÑÑ Ð´ÐµÑкÑипÑоÑов. Сам Ñайл не
              оÑкÑÑваеÑÑÑ Ð¸ дÑÑгие ÑайловÑе опеÑаÑии
              (напÑимеÑ, read(2), write(2), fchmod(2), fchown(2),
              fgetxattr(2), mmap(2)) завеÑÑаÑÑÑ Ñ Ð¾Ñибкой EBADF.

              СледÑÑÑие опеÑаÑии могÑÑ Ð²ÑполнÑÑÑÑÑ Ð½Ð°Ð´
              полÑÑеннÑм ÑайловÑм деÑкÑипÑоÑом:

              *  close(2); fchdir(2) (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.5); fstat(2)
                 (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.6).

              *  Создание дÑбликаÑа Ñайлового
                 деÑкÑипÑоÑа (dup(2), fcntl(2)  F_DUPFD и Ñ.д.).

              *  ÐолÑÑение и ÑÑÑановка Ñлагов ÑайловÑÑ
                 деÑкÑипÑоÑов (fcntl(2)  F_GETFD и F_SETFD).

              *  ÐолÑÑение Ñлагов ÑоÑÑоÑÐ½Ð¸Ñ Ð¾ÑкÑÑÑого
                 Ñайла Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑии fcntl(2) F_GETFL: в
                 возвÑаÑаемÑе Ñлаги бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑÑн биÑ
                 O_PATH.

              *  ÐеÑедаÑа Ñайлового деÑкÑипÑоÑа в
                 аÑгÑменÑе dirfd Ð´Ð»Ñ openat(2) и дÑÑгиÑ
                 ÑиÑÑемнÑÑ Ð²Ñзовов «*at()». Рним оÑноÑиÑÑÑ
                 linkat(2) Ñ Ñлагом AT_EMPTY_PATH (или ÑеÑез procfs
                 Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ AT_SYMLINK_FOLLOW) даже, еÑли Ñайл
                 не ÑвлÑеÑÑÑ ÐºÐ°Ñалогом.

              *  ÐеÑедаÑа Ñайлового деÑкÑипÑоÑа в
                 дÑÑгой пÑоÑеÑÑ ÑеÑез доменнÑй ÑÐ¾ÐºÐµÑ UNIX
                 (ÑмоÑÑиÑе SCM_RIGHTS в unix(7)).

              ÐÑли O_PATH Ñказан в flags, Ñо биÑÑ Ñлагов,
              оÑлиÑнÑе Ð¾Ñ O_CLOEXEC, O_DIRECTORYи O_NOFOLLOW,
              игноÑиÑÑÑÑÑÑ.

              ÐÑли pathname ÑвлÑеÑÑÑ ÑимволÑной ÑÑÑлкой и
              Ñакже Ñказан Ñлаг O_NOFOLLOW, Ñо вÑзов
              возвÑаÑÐ°ÐµÑ ÑайловÑй деÑкÑипÑоÑ,
              ÑказÑваÑÑий на ÑимволÑнÑÑ ÑÑÑлкÑ. ÐÑоÑ
              ÑайловÑй деÑкÑипÑÐ¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ
              в аÑгÑменÑе dirfd Ð´Ð»Ñ Ð²Ñзовов fchownat(2),
              fstatat(2), linkat(2) и readlinkat(2) Ñ Ð¿ÑÑÑÑм именем
              пÑÑи, ÑÑÐ¾Ð±Ñ Ð²ÑполниÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð½Ð°Ð´
              ÑимволÑной ÑÑÑлкой.

       O_SYNC ÐпеÑаÑии запиÑи Ñайла бÑдÑÑ Ð²ÑполненÑ
              ÑоглаÑно ÑÑебованиÑм ÑелоÑÑноÑÑи
              ÑинÑÑонизаÑии ввода-вÑвода file (по
              ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ ÑелоÑÑноÑÑÑÑ ÑинÑÑонизаÑии
              ввода-вÑвода data, пÑедоÑÑавлÑемой
              O_DSYNC).

              РвÑемени возвÑаÑа из write(2) (и подобнÑÑ)
              вÑÑоднÑе даннÑе и вÑе меÑаданнÑе Ñайла
              Ñже пеÑÐµÐ´Ð°Ð½Ñ Ð² задейÑÑвованное
              аппаÑаÑное обеÑпеÑение (Ñ. е., как еÑли
              Ð±Ñ Ð·Ð° каждÑм write(2) бÑл вÑполнен вÑзов
              fsync(2)). СмоÑÑиÑе ÐÐÐÐЧÐÐÐЯ далее.

       O_TMPFILE (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.11)
              Создание безÑмÑнного вÑеменного
              Ñайла. РаÑгÑменÑе pathname ÑказÑваеÑÑÑ
              каÑалог; безÑмÑÐ½Ð½Ð°Ñ inode бÑÐ´ÐµÑ Ñоздана в
              Ñайловой ÑиÑÑеме ÑÑого каÑалога. ÐÑÑ
              запиÑанное в полÑÑеннÑй Ñайл бÑдеÑ
              поÑеÑÑно пÑи закÑÑÑии поÑледнего
              Ñайлового деÑкÑипÑоÑа, еÑли ÑÐ°Ð¹Ð»Ñ Ð½Ðµ
              бÑÐ´ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñено имÑ.

              Флаг O_TMPFILE должен бÑÑÑ Ñказан вмеÑÑе Ñ
              O_RDWR или O_WRONLY и, необÑзаÑелÑно, O_EXCL.
              ÐÑли O_EXCL не Ñказан, Ñо можно
              иÑполÑзоваÑÑ linkat(2) Ð´Ð»Ñ ÑÑÑлки на
              вÑеменнÑй Ñайл в Ñайловой ÑиÑÑеме,
              Ñделав его поÑÑоÑннÑм Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð´Ð°:

                  char path[PATH_MAX];
                  fd = open("/path/to/dir", O_TMPFILE | O_RDWR,
                                          S_IRUSR | S_IWUSR);

                  /* ФайловÑй ввод-вÑвод в «fd»⦠*/

                  snprintf(path, PATH_MAX,  "/proc/self/fd/%d", fd);
                  linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file",
                                          AT_SYMLINK_FOLLOW);

              Ð ÑÑом ÑлÑÑае аÑгÑменÑом mode Ñ open()
              опÑеделÑеÑÑÑ Ñежим доÑÑÑпа к ÑÐ°Ð¹Ð»Ñ ÐºÐ°Ðº Ñ
              O_CREAT.

              Указание O_EXCL вмеÑÑе Ñ O_TMPFILE оÑклÑÑаеÑ
              возможноÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑимволÑной ÑÑÑлки
              в Ñайловой ÑиÑÑеме ÑказаннÑм Ñанее
              ÑпоÑобом (замеÑим, ÑÑо назнаÑение O_EXCL
              в ÑÑом ÑлÑÑае оÑлиÑаеÑÑÑ Ð¾Ñ Ð¾Ð±ÑÑного O_EXCL).

              ÐÑÑÑ Ð´Ð²Ð° оÑновнÑÑ ÑлÑÑÐ°Ñ Ð¸ÑполÑзованиÑ
              O_TMPFILE:

              *  ÐополниÑелÑное ÑвойÑÑво tmpfile(3):
                 Ñвободное Ð¾Ñ ÑоÑÑÑзаÑелÑноÑÑи
                 Ñоздание вÑеменнÑÑ Ñайлов, коÑоÑÑе:
                 авÑомаÑиÑеÑки ÑдалÑÑÑÑÑ Ð¿Ñи закÑÑÑии;
                 недоÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ имени; не подвеÑженÑ
                 аÑаке ÑеÑез ÑимволÑнÑе ÑÑÑлки; не
                 ÑÑебÑÑÑ Ð¾Ñ Ð²ÑзÑваÑÑего подбиÑаÑÑ
                 ÑникалÑное имÑ.

              *  Создание Ñайла, коÑоÑÑй изнаÑалÑно
                 не видим, и коÑоÑÑй заÑем заполнÑеÑÑÑ
                 даннÑми и позволÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð°ÑÑибÑÑÑ
                 в Ñайловой ÑиÑÑеме (fchown(2), fchmod(2),
                 fsetxattr(2) и Ñ. д.) до авÑомаÑиÑеÑкого
                 вÑÑÑÐ°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð² ÑайловÑÑ ÑиÑÑÐµÐ¼Ñ Ð²
                 полноÑÑÑÑ Ð·Ð°ÐºÐ¾Ð½Ñенном виде (Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
                 linkat(2) как опиÑано Ñанее).

              ÐÐ»Ñ O_TMPFILE ÑÑебÑеÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжка в Ñайловой
              ÑиÑÑеме; она еÑÑÑ ÑолÑко в неÑколÑкиÑ
              ÑайловÑÑ ÑиÑÑÐµÐ¼Ð°Ñ Linux. РпеÑвой
              ÑеализаÑии поддеÑжка пÑедоÑÑавлÑлаÑÑ Ð²
              ÑайловÑÑ ÑиÑÑÐµÐ¼Ð°Ñ ext2, ext3, ext4, UDF, Minix и
              shmem. ÐоддеÑжка в XFS добавлена в Linux 3.15,
              а поддеÑжка Btrfs и F2FS добавлена в Linux
              3.16.

       O_TRUNC
              ÐÑли Ñайл Ñже ÑÑÑеÑÑвÑÐµÑ Ð¸ ÑвлÑеÑÑÑ Ð¾Ð±ÑÑнÑм
              Ñайлом и Ñежим доÑÑÑпа позволÑÐµÑ Ð¿Ð¸ÑаÑÑ
              в ÑÑÐ¾Ñ Ñайл (Ñ.е. ÑÑÑановлен Ñлаг O_RDWR или
              O_WRONLY), Ñо его длина бÑÐ´ÐµÑ ÑÑезана до
              нÑлÑ. ÐÑли Ñайл ÑвлÑеÑÑÑ FIFO или
              ÑеÑминалÑнÑм ÑÑÑÑойÑÑвом, Ñо ÑÑÐ¾Ñ Ñлаг
              игноÑиÑÑеÑÑÑ. РдÑÑÐ³Ð¸Ñ ÑлÑÑаÑÑ Ð´ÐµÐ¹ÑÑвие
              Ñлага O_TRUNC не опÑеделено.

   creat()
       ÐÑзов creat() ÑквиваленÑен вÑÐ·Ð¾Ð²Ñ open() Ñ
       знаÑением flags O_CREAT|O_WRONLY|O_TRUNC.

   openat()
       СиÑÑемнÑй вÑзов openat() ÑабоÑÐ°ÐµÑ Ñакже как
       ÑиÑÑемнÑй вÑзов open(), за иÑклÑÑением ÑлÑÑаев,
       опиÑаннÑÑ Ð·Ð´ÐµÑÑ.

       ÐÑли в pathname задан оÑноÑиÑелÑнÑй пÑÑÑ, Ñо он
       ÑÑиÑаеÑÑÑ Ð¾ÑноÑиÑелÑно каÑалога, на коÑоÑÑй
       ÑÑÑлаеÑÑÑ ÑайловÑй деÑкÑипÑÐ¾Ñ dirfd (а не
       оÑноÑиÑелÑно ÑекÑÑего ÑабоÑего каÑалога
       вÑзÑваÑÑего пÑоÑеÑÑа, как ÑÑо делаеÑÑÑ Ð² open()).

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

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

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑÐ·Ð¾Ð²Ñ open(), openat() и creat() возвÑаÑаÑÑ Ð½Ð¾Ð²Ñй
       деÑкÑипÑÐ¾Ñ Ñайла или -1 в ÑлÑÑае оÑибки (в
       ÑÑом ÑлÑÑае errno ÑÑÑанавливаеÑÑÑ Ð²
       ÑооÑвеÑÑÑвÑÑÑее знаÑение).

ÐШÐÐÐÐ
       ÐÑÐ·Ð¾Ð²Ñ open(), openat() и creat() могÑÑ Ð·Ð°Ð²ÐµÑÑаÑÑÑÑ Ñо
       ÑледÑÑÑими оÑибками:

       EACCES ÐапÑоÑеннÑй доÑÑÑп к ÑÐ°Ð¹Ð»Ñ Ð½Ðµ ÑазÑеÑÑн,
              или один из каÑалогов в pathname не
              позволÑÐµÑ Ð¿Ð¾Ð¸Ñк, Ñайл еÑÑ Ð½Ðµ ÑÑÑеÑÑвÑеÑ,
              или доÑÑÑп Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи в ÑодиÑелÑÑкий
              каÑалог не ÑазÑеÑÑн (Ñм. Ñакже
              path_resolution(7)).

       EDQUOT ÐÑли Ñказан Ñлаг O_CREAT, Ñайл не ÑÑÑеÑÑвÑеÑ
              и иÑÑеÑпана полÑзоваÑелÑÑÐºÐ°Ñ ÐºÐ²Ð¾Ñа на
              диÑковÑе блоки или inode Ñайловой
              ÑиÑÑемÑ.

       EEXIST pathname Ñже ÑÑÑеÑÑвÑеÑ, Ñо бÑли ÑÐºÐ°Ð·Ð°Ð½Ñ O_CREAT
              и O_EXCL.

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

       EFBIG  СмоÑÑиÑе EOVERFLOW.

       EINTR  ÐÑи блокиÑÑÑÑем ожидании завеÑÑениÑ
              оÑкÑÑÑÐ¸Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑÑÑÑойÑÑва (напÑимеÑ,
              FIFO; Ñм. fifo(7)), вÑзов бÑл пÑеÑван
              обÑабоÑÑиком Ñигнала; ÑмоÑÑиÑе signal(7).

       EINVAL Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñлаг
              O_DIRECT. ÐодÑобноÑÑи ÑмоÑÑиÑе в ÐÐÐÐЧÐÐÐЯ.

       EINVAL ÐекоÑÑекÑное знаÑение flags.

       EINVAL Ð flags Ñказан O_TMPFILE, но не Ñказан O_WRONLY
              или O_RDWR.

       EISDIR pathname ÑказÑÐ²Ð°ÐµÑ Ð½Ð° каÑалог и Ñип доÑÑÑпа
              подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ ( Ñо еÑÑÑ ÑÑÑановлен
              Ñлаг O_WRONLY или O_RDWR).

       EISDIR ÐнаÑение pathname ÑÑÑлаеÑÑÑ Ð½Ð° ÑÑÑеÑÑвÑÑÑий
              каÑалог, в flags Ñказан O_TMPFILE и один из
              O_WRONLY или O_RDWR, но веÑÑÐ¸Ñ ÑдÑа не
              пÑедоÑÑавлÑÐµÑ ÑвойÑÑво O_TMPFILE.

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

       ELOOP  ÐнаÑение pathname ÑвлÑеÑÑÑ ÑимволÑной
              ÑÑÑлкой и в flags ÑÑÑановлен O_NOFOLLOW, но
              оÑÑÑÑÑÑвÑÐµÑ O_PATH.

       EMFILE ÐÑло доÑÑигнÑÑо огÑаниÑение по
              колиÑеÑÑÐ²Ñ Ð¾ÑкÑÑÑÑÑ ÑайловÑÑ Ð´ÐµÑкÑипÑоÑов
              на пÑоÑеÑÑ (ÑмоÑÑиÑе опиÑание RLIMIT_NOFILE в
              getrlimit(2)).

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

       ENFILE ÐоÑÑигнÑÑо макÑималÑное колиÑеÑÑво
              оÑкÑÑÑÑÑ Ñайлов в ÑиÑÑеме.

       ENODEV pathname ÑÑÑлаеÑÑÑ Ð½Ð° ÑпеÑиалÑнÑй Ñайл
              ÑÑÑÑойÑÑва, но ÑооÑвеÑÑÑвÑÑÑего ÑÑÑÑойÑÑва
              не ÑÑÑеÑÑвÑÐµÑ (ÑÑо оÑибка в ÑдÑе Linux:
              должно возвÑаÑаÑÑÑÑ ENXIO).

       ENOENT Флаг O_CREAT не задан и Ñайл Ñ Ñаким
              именем не ÑÑÑеÑÑвÑеÑ, или же не ÑÑÑеÑÑвÑеÑ
              один из каÑалогов в pathname, или имееÑÑÑ
              повиÑÑÐ°Ñ ÑимволÑÐ½Ð°Ñ ÑÑÑлка.

       ENOENT ÐнаÑение pathname ÑÑÑлаеÑÑÑ Ð½Ð° неÑÑÑеÑÑвÑÑÑий
              каÑалог, в flags Ñказан O_TMPFILE и один из
              O_WRONLY или O_RDWR, но веÑÑÐ¸Ñ ÑдÑа не
              пÑедоÑÑавлÑÐµÑ ÑвойÑÑво O_TMPFILE.

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

       ENOSPC Файл pathname должен бÑÑÑ Ñоздан, но на
              ÑÑÑÑойÑÑве его ÑодеÑжаÑем Ð½ÐµÑ Ð¼ÐµÑÑа длÑ
              нового Ñайла.

       ENOTDIR
              ÐомпоненÑ, коÑоÑÑй обознаÑен как
              каÑалог в pathname, ÑаковÑм не ÑвлÑеÑÑÑ, или
              бÑл Ñказан Ñлаг O_DIRECTORY, но pathname не
              ÑвлÑеÑÑÑ ÐºÐ°Ñалогом.

       ENXIO  УÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ O_NONBLOCK | O_WRONLY ,
              именованнÑй Ñайл Ð¸Ð¼ÐµÐµÑ Ñип FIFO и ни
              один пÑоÑеÑÑ Ð½Ðµ оÑкÑÑл FIFO на ÑÑение.

       ENXIO  Файл ÑвлÑеÑÑÑ ÑпеÑиалÑнÑм Ñайлом
              ÑÑÑÑойÑÑва, но ÑооÑвеÑÑÑвÑÑÑее ÑÑÑÑойÑÑво не
              ÑÑÑеÑÑвÑеÑ.

       EOPNOTSUPP
              Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема, ÑодеÑжаÑÐ°Ñ pathname, не
              поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ O_TMPFILE.

       EOVERFLOW
              pathname ÑÑÑлаеÑÑÑ Ð½Ð° обÑÑнÑй Ñайл, коÑоÑÑй
              ÑлиÑком велик Ð´Ð»Ñ Ð¾ÑкÑÑÑиÑ. ÐбÑÑно, ÑÑо
              ÑлÑÑаеÑÑÑ ÐºÐ¾Ð³Ð´Ð° пÑиложение,
              ÑкомпилиÑованное на 31-биÑной
              плаÑÑоÑме без -D_FILE_OFFSET_BITS=64, пÑÑаеÑÑÑ
              оÑкÑÑÑÑ Ñайл ÑазмеÑом более (1<<31)-1 байÑ;
              ÑмоÑÑиÑе Ñакже опиÑание O_LARGEFILE Ñанее. Ð‐
              Ñа оÑибка опÑеделена в POSIX.1; в ÑдÑÐ°Ñ Ð´Ð¾
              веÑÑии 2.6.24 Linux в ÑÑом ÑлÑÑае вÑдавал
              оÑÐ¸Ð±ÐºÑ EFBIG.

       EPERM  Ðадан Ñлаг O_NOATIME, но ÑÑÑекÑивнÑй ID
              полÑзоваÑÐµÐ»Ñ Ð²ÑзÑваÑÑего пÑоÑеÑÑа не
              ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем Ñайла и
              вÑзÑваÑÑий не Ð¸Ð¼ÐµÐµÑ Ð¿Ñав.

       EPERM  ÐÑполнение опеÑаÑии пÑедоÑвÑаÑено
              опеÑаÑÑванием (file seal); ÑмоÑÑиÑе fcntl(2).

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

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

       EWOULDBLOCK
              Указан Ñлаг O_NONBLOCK, но неÑовмеÑÑимаÑ
              аÑенда (lease) ÑдеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñайл (ÑмоÑÑиÑе
              fcntl(2)).

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

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

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

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

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       open(), creat() SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.

       openat(): POSIX.1-2008.

       Флаги O_DIRECT, O_NOATIME, O_PATH и O_TMPFILE еÑÑÑ ÑолÑко в
       Linux. ÐÐ»Ñ Ð¸Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ
       задаÑÑ _GNU_SOURCE.

       Флаги O_CLOEXEC, O_DIRECTORY и O_NOFOLLOW не ÑÐºÐ°Ð·Ð°Ð½Ñ Ð²
       POSIX.1-2001, но еÑÑÑ Ð² POSIX.1-2008. ÐаÑÐ¸Ð½Ð°Ñ Ñ glibc 2.12, иÑ
       опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ð¾Ð¿Ñеделив или
       _POSIX_C_SOURCE Ñо знаÑением болÑÑим и ÑавнÑм
       200809L, или _XOPEN_SOURCE Ñо знаÑением болÑÑим и
       ÑавнÑм 700. Ð glibc 2.11 и ÑÑаÑее Ð¸Ñ Ð¾Ð¿ÑеделениÑ
       можно полÑÑиÑÑ Ð¾Ð¿Ñеделив _GNU_SOURCE.

       Ðак бÑло оÑмеÑено в feature_test_macros(7), Ñакие
       макÑоÑÑ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑв как _POSIX_C_SOURCE,
       _XOPEN_SOURCE и _GNU_SOURCE, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð¾
       вклÑÑÐµÐ½Ð¸Ñ Ð»ÑбÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÑнÑÑ Ñайлов.

ÐÐÐÐЧÐÐÐЯ
       Ð Linux Ñлаг O_NONBLOCK ÑказÑваеÑ, ÑÑо Ñайл нÑжно
       оÑкÑÑÑÑ, но не обÑзаÑелÑно бÑÐ´ÐµÑ Ð¿ÑоизводиÑÑÑÑ
       ÑÑение или запиÑÑ. ÐбÑÑно ÑÑо ÑказÑваеÑÑÑ Ð´Ð»Ñ
       оÑкÑÑÑÐ¸Ñ ÑÑÑÑойÑÑва, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÐµÐ³Ð¾ ÑайловÑй
       деÑкÑипÑÐ¾Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ioctl(2).

       РезÑлÑÑÐ°Ñ ÑабоÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñии Ñлагов O_RDONLY |
       O_TRUNC в ÑазнÑÑ ÑеализаÑиÑÑ ÑазнÑй (нигде не
       опÑеделÑн). Ðо Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ Ñайл ÑÑекаеÑÑÑ.

       ÐамеÑим, ÑÑо open() Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑкÑÑваÑÑ ÑпеÑиалÑнÑе
       ÑÐ°Ð¹Ð»Ñ ÑÑÑÑойÑÑв, но creat() не Ð¼Ð¾Ð¶ÐµÑ Ð¸Ñ ÑоздаваÑÑ;
       вмеÑÑо ÑÑого иÑполÑзÑйÑе mknod(2).

       ÐÑли Ñайл ÑолÑко ÑÑо бÑл Ñоздан, его полÑ
       st_atime, st_ctime, st_mtime (вÑÐµÐ¼Ñ Ð¿Ð¾Ñледнего доÑÑÑпа,
       поÑледней ÑÐ¼ÐµÐ½Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð¸ поÑледнего
       изменениÑ, ÑооÑвеÑÑÑвенно; Ñм. stat(2))
       ÑÑÑанавливаÑÑÑÑ Ð² знаÑение ÑекÑÑего вÑемени,
       и оно ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¿Ð¾Ð»Ñми st_ctime и st_mtime
       ÑодиÑелÑÑкого каÑалога. Ðли же, еÑли Ñайл
       изменÑеÑÑÑ Ð¸Ð·-за ÑÑÑановленного Ñлага O_TRUNC,
       Ñо его Ð¿Ð¾Ð»Ñ st_ctime и st_mtime ÑÑÑанавливаÑÑÑÑ Ð²
       знаÑение ÑекÑÑего вÑемени.

       Ð¤Ð°Ð¹Ð»Ñ Ð² каÑалоге /proc/[pid]/fd пÑедÑÑавлÑÑÑ
       оÑкÑÑÑÑе ÑайловÑе деÑкÑипÑоÑÑ Ð¿ÑоÑеÑÑа Ñ PID
       ÑавнÑм pid. Ð¤Ð°Ð¹Ð»Ñ Ð² каÑалоге /proc/[pid]/fdinfo
       пÑедÑÑавлÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± ÑÑиÑ
       ÑайловÑÑ Ð´ÐµÑкÑипÑоÑаÑ. ÐодÑобное опиÑание
       даннÑÑ ÐºÐ°Ñалогов можно найÑи в proc(5).

   ÐÑкÑÑÑÑе ÑайловÑе опиÑаниÑ
       ТеÑмин «оÑкÑÑÑое Ñайловое опиÑание» (open file
       description) иÑполÑзÑеÑÑÑ Ð² POSIX Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð½Ð°
       запиÑи в ÑиÑÑемной ÑаблиÑе оÑкÑÑÑÑÑ Ñайлов. Ð
       дÑÑÐ³Ð¸Ñ ÐºÐ¾Ð½ÑекÑÑаÑ, ÑÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ Ñакже назÑваеÑÑÑ
       «оÑкÑÑÑÑй ÑайловÑй обÑекÑ» (open file object),
       «опиÑаÑÐµÐ»Ñ Ñайла» (file handle), «»ÑаблиÑнаÑ
       запиÑÑ Ð¾ÑкÑÑÑого Ñайла (open file table entry) или
       struct file (Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÑазÑабоÑÑика ÑдÑа).

       ÐÑи Ñоздании копии Ñайлового деÑкÑипÑоÑа (Ñ
       помоÑÑÑ dup(2) или подобного вÑзова), копиÑ
       ÑÑÑлаеÑÑÑ Ð½Ð° Ñо же оÑкÑÑÑое Ñайловое опиÑание
       ÑÑо и изнаÑалÑнÑй ÑайловÑй деÑкÑипÑоÑ, и,
       ÑледоваÑелÑно, два ÑайловÑÑ Ð´ÐµÑкÑипÑоÑа
       имеÑÑ Ð¾Ð±Ñее Ñайловое ÑмеÑение и Ñлаги
       ÑоÑÑоÑÐ½Ð¸Ñ Ñайла. Ð¢Ð°ÐºÐ°Ñ Ð¾Ð±ÑноÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ñакже
       бÑÑÑ Ñ Ð´Ð²ÑÑ Ð¿ÑоÑеÑÑов: пÑоÑеÑÑ-поÑомок,
       ÑоздаваемÑй fork(2), наÑледÑÐµÑ ÐºÐ¾Ð¿Ð¸Ð¸ ÑайловÑÑ
       деÑкÑипÑоÑов Ñвоего ÑодиÑÐµÐ»Ñ Ð¸ ÑÑи копии
       ÑÑÑлаÑÑÑÑ Ð½Ð° Ñе же оÑкÑÑÑÑе ÑайловÑе опиÑаниÑ.

       ÐÑи каждом open()  Ñайла ÑоздаÑÑÑÑ Ð½Ð¾Ð²Ð¾Ðµ
       Ñайловое опиÑание; Ñаким обÑазом, можеÑ
       бÑÑÑ Ð½ÐµÑколÑко оÑкÑÑÑÑÑ ÑайловÑÑ Ð¾Ð¿Ð¸Ñаний,
       ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ inode Ñайла.

       ÐÐ»Ñ Ð¿ÑовеÑки Ñого, ÑÑо два ÑайловÑÑ
       деÑкÑипÑоÑа (одного пÑоÑеÑÑа или ÑазнÑÑ)
       ÑÑÑлаÑÑÑÑ Ð½Ð° одно Ñайловое опиÑание, в Linux
       можно иÑполÑзоваÑÑ Ð²Ñзов kcmp(2) Ñ Ð¾Ð¿ÐµÑаÑией
       KCMP_FILE.

   СинÑÑонизиÑованнÑй ввод-вÑвод
       Ð POSIX.1-2008 ÑпоÑобноÑÑÑ Â«ÑинÑÑонизиÑованного
       ввода-вÑвода» опиÑана в виде ÑазлиÑнÑÑ
       ваÑианÑов ÑинÑÑонизиÑованного
       ввода-вÑвода и Ð´Ð»Ñ open() опÑеделÑÐµÑ Ñлаги
       ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÐ¼ O_SYNC, O_DSYNC и O_RSYNC.
       ÐезавиÑимо Ð¾Ñ Ñого, имееÑÑÑ Ð»Ð¸ в ÑеализаÑии
       Ð´Ð°Ð½Ð½Ð°Ñ ÑпоÑобноÑÑÑ, она должна, как
       минимÑм, поддеÑживаÑÑ Ð¸ÑполÑзование Ñлага
       O_SYNC Ð´Ð»Ñ Ð¾Ð±ÑÑнÑÑ Ñайлов.

       Ð Linux ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ O_SYNC и O_DSYNC, но не O_RSYNC
       (немного некоÑÑекÑно, в glibc опÑеделÑн O_RSYNC
       Ñо знаÑением как Ñ O_SYNC).

       Флаг O_SYNC пÑедоÑÑавлÑÐµÑ Ð²Ñполнение
       ÑелоÑÑного ÑинÑÑонизованного ввод-вÑвода
       file, Ñо еÑÑÑ Ð¾Ð¿ÐµÑаÑии запиÑи пеÑедаÑÑ Ð´Ð°Ð½Ð½Ñе и
       вÑе ÑвÑзаннÑе меÑаданнÑе в
       задейÑÑвованное аппаÑаÑное обеÑпеÑение.
       Флаг O_DSYNC пÑедоÑÑавлÑÐµÑ Ð²Ñполнение
       ÑелоÑÑного ÑинÑÑонизованного ввод-вÑвода
       data, Ñо еÑÑÑ Ð¾Ð¿ÐµÑаÑии запиÑи пеÑедаÑÑ Ð´Ð°Ð½Ð½Ñе в
       задейÑÑвованное аппаÑаÑное обеÑпеÑение,
       но обновлÑÑÑÑÑ ÑолÑко Ñе меÑаданнÑе, коÑоÑÑе
       ÑÑебÑÑÑÑÑ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледÑÑÑего ÑÑениÑ.
       ÐолноÑа ÑелоÑÑноÑÑи даннÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑокÑаÑиÑÑ
       колиÑеÑÑво диÑковÑÑ Ð¾Ð¿ÐµÑаÑий, коÑоÑÑе ÑÑебÑÑÑÑÑ
       пÑиложениÑм, не ÑÑебÑÑÑим гаÑанÑий
       ÑелоÑÑноÑÑи Ñайлов.

       ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ñипами
       обеÑпеÑÐµÐ½Ð¸Ñ ÑелоÑÑноÑÑи ÑаÑÑмоÑÑим две ÑаÑÑи
       меÑаданнÑÑ Ñайла: меÑка вÑемени
       поÑледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñайла (st_mtime) и длинÑ
       Ñайла. ÐÑе опеÑаÑии запиÑи обновлÑÑÑ Ð¼ÐµÑкÑ
       вÑемени поÑледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñайла, но
       ÑолÑко пÑи запиÑи, коÑоÑÐ°Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ Ð´Ð°Ð½Ð½Ñе
       в ÐºÐ¾Ð½ÐµÑ Ñайла, бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð° длина Ñайла.
       ÐеÑка вÑемени поÑледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñайла
       не ÑÑебÑеÑÑÑ Ð´Ð»Ñ ÐºÐ¾ÑÑекÑного ÑÑÐµÐ½Ð¸Ñ Ñайла,
       Ñего не ÑкажеÑÑ Ð¾ длине. Таким обÑазом,
       O_DSYNC гаÑанÑиÑÑÐµÑ ÑолÑко запиÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ð¹ о
       меÑаданнÑÑ Ð´Ð»Ð¸Ð½Ñ Ñайла (в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº O_SYNC
       Ñакже вÑегда запиÑÑÐ²Ð°ÐµÑ Ð¼ÐµÑаданнÑе о меÑки
       вÑемени поÑледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñайла).

       Ðо Linux веÑÑии 2.6.33 в Linux Ñеализован ÑолÑко
       Ñлаг O_SYNC Ð´Ð»Ñ open(). Ðднако, когда ÑÑÐ¾Ñ Ñлаг
       Ñказан, болÑÑинÑÑво ÑайловÑÑ ÑиÑÑем в
       дейÑÑвиÑелÑноÑÑи пÑедоÑÑавлÑÑÑ ÑквиваленÑ
       вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑелоÑÑноÑÑи ÑинÑÑонизиÑованного
       ввода-вÑвода data (Ñ. е., на Ñамом деле O_SYNC
       бÑл Ñеализован как ÑÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ O_DSYNC).

       ÐаÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.33, пÑедоÑÑавлÑÐµÑ ÐºÐ¾ÑÑекÑнаÑ
       поддеÑжка O_SYNC. Ðднако Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑениÑ
       обÑаÑной двоиÑной ÑовмеÑÑимоÑÑи, O_DSYNC бÑл
       опÑеделÑн Ñ Ñем же знаÑением ÑÑо и ÑÑаÑÑй
       O_SYNC, а O_SYNC бÑл опÑеделÑн как новое
       знаÑение Ñлага (два биÑа), коÑоÑое вклÑÑаеÑ
       знаÑение Ñлага O_DSYNC. ÐÑо позволÑеÑ
       пÑиложениÑм, ÑкомпилиÑованнÑм Ñ Ð½Ð¾Ð²Ñми
       заголовоÑнÑми Ñайлами полÑÑаÑÑ, по кÑайней
       меÑе, ÑеманÑÐ¸ÐºÑ O_DSYNC ÑÐ´ÐµÑ pre-2.6.33.

   NFS
       РпÑоÑоколе, по коÑоÑÐ¾Ð¼Ñ ÑабоÑÐ°ÐµÑ NFS, ÑÑÑеÑÑвÑеÑ
       множеÑÑво недоÑабоÑок, оказÑваÑÑÐ¸Ñ Ð²Ð»Ð¸Ñние
       на многое, в Ñом ÑиÑле на ÑабоÑÑ Ñ O_SYNC и
       O_NDELAY.

       Ð ÑайловÑÑ ÑиÑÑÐµÐ¼Ð°Ñ NFS Ñ Ð²ÐºÐ»ÑÑÑннÑм
       пÑоеÑиÑованием UID, open() Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ
       ÑайловÑй деÑкÑипÑоÑ, но, напÑимеÑ, запÑоÑÑ
       read(2) бÑдÑÑ Ð¾ÑÐºÐ»Ð¾Ð½ÐµÐ½Ñ Ñ Ð¾Ñибкой EACCES. ÐÑо
       пÑоиÑÑÐ¾Ð´Ð¸Ñ Ð¸Ð·-за Ñого, ÑÑо ÐºÐ»Ð¸ÐµÐ½Ñ Ð²ÑполнÑеÑ
       open() пÑовеÑÑÑ Ð¾Ð´Ð½Ð¸ пÑава, но ÑеÑÐ²ÐµÑ Ð²ÑполнÑеÑ
       пÑоеÑиÑование UID ÑолÑко пÑи запÑоÑÐ°Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸
       запиÑи.

   FIFO
       ÐÑкÑÑÑие на ÑÑение или запиÑÑ ÐºÐ¾Ð½Ñа FIFO
       пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº блокиÑовке Ñо ÑÐµÑ Ð¿Ð¾Ñ, пока
       дÑÑгой ÐºÐ¾Ð½ÐµÑ Ð½Ðµ Ñакже не бÑÐ´ÐµÑ Ð¾ÑкÑÑÑ (дÑÑгим
       пÑоÑеÑÑом или ниÑÑÑ). ÐодÑобноÑÑи ÑмоÑÑиÑе в
       fifo(7).

   Режим доÑÑÑпа к ÑайлÑ
       РоÑлиÑие Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ Ð·Ð½Ð°Ñений, ÑказÑваемÑÑ Ð²
       flags, знаÑÐµÐ½Ð¸Ñ Ñежима доÑÑÑпа O_RDONLY, O_WRONLY и
       O_RDWR, не опÑеделÑÑÑÑÑ Ð¾ÑделÑнÑми биÑами.
       ТоÑнее, они задаÑÑÑÑ Ð´Ð²ÑÐ¼Ñ Ð¿ÐµÑвÑми биÑами
       flags, и имеÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ 0, 1 и 2, ÑооÑвеÑÑÑвенно.
       ÐÑÑгими Ñловами, комбинаÑÐ¸Ñ O_RDONLY | O_WRONLY
       пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº логиÑеÑкой оÑибке и ÑоÑно не
       ÑабоÑÐ°ÐµÑ ÐºÐ°Ðº O_RDWR.

       Ð Linux заÑезеÑвиÑован ÑпеÑиалÑнÑй
       неÑÑандаÑÑнÑй Ñежим доÑÑÑпа 3 (11 двоиÑное) в
       flags, пÑи коÑоÑом: пÑовеÑÑÑÑÑÑ Ð¿Ñава на ÑÑение и
       запиÑÑ Ðº ÑÐ°Ð¹Ð»Ñ Ð¸ возвÑаÑаеÑÑÑ ÑайловÑй
       деÑкÑипÑоÑ, коÑоÑÑй не Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ
       Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запиÑи. ÐаннÑй неÑÑандаÑÑнÑй
       Ñежим доÑÑÑпа иÑполÑзÑеÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑми
       дÑайвеÑами Linux Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ñайлового
       деÑкÑипÑоÑа, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²
       ioctl(2) ÑолÑко Ð´Ð»Ñ ÑпеÑиалÑнÑÑ Ð¾Ð¿ÐµÑаÑий Ñ
       ÑÑÑÑойÑÑвом.

   ÐбоÑнование openat() и оÑÑалÑного пÑогÑаммного
       инÑеÑÑейÑа Ñайлового деÑкÑипÑоÑа каÑалога
       ÐÑзов openat() и дÑÑгие ÑиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ Ð¸
       библиоÑеÑнÑе ÑÑнкÑии, коÑоÑÑе иÑполÑзÑÑÑ
       ÑайловÑй деÑкÑипÑÐ¾Ñ ÐºÐ°Ñалога в каÑеÑÑве
       аÑгÑменÑа (Ñ. е., execveat(2), faccessat(2), fanotify_mark(2),
       fchmodat(2), fchownat(2), fstatat(2), futimesat(2), linkat(2),
       mkdirat(2), mknodat(2), name_to_handle_at(2), readlinkat(2),
       renameat(2), symlinkat(2), unlinkat(2), utimensat(2)  mkfifoat(3) и
       scandirat(3)) поддеÑживаÑÑÑÑ Ð¿Ð¾ двÑм пÑиÑинам. ÐоÑ
       обÑÑÑнение пÑименимое к вÑÐ·Ð¾Ð²Ñ openat(), но
       обÑÑÑнение Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ð¸Ð½ÑеÑÑейÑов
       аналогиÑно.

       Ðо-пеÑвÑÑ, openat() позволÑÐµÑ Ð¿ÑиложениÑ
       избежаÑÑ ÑÑловий ÑоÑÑÑзаÑелÑноÑÑи, коÑоÑÑе
       могÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ, когда open() оÑкÑÑÐ²Ð°ÐµÑ ÑайлÑ
       в каÑалогаÑ, оÑлиÑнÑÑ Ð¾Ñ ÑекÑÑего ÑабоÑего
       каÑалога. СоÑÑÑзаÑелÑноÑÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¸Ð·-за
       Ñого, ÑÑо один из компоненÑов пÑеÑикÑа
       каÑалога, Ñказанного open(), Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ
       одновÑеменно Ñ Ð²Ñзовом open(). ÐапÑимеÑ,
       пÑедположим, ÑÑо Ð¼Ñ ÑоÑим ÑоздаÑÑ Ñайл
       path/to/xxx.dep и ÑÑÑеÑÑвÑÐµÑ Ñайл path/to/xxx. ÐÑоблема
       наÑодиÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ñагами пÑовеÑки
       ÑÑÑеÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ñозданием Ñайла,
       ÑказÑваемÑе path или to (коÑоÑÑе могÑÑ Ð±ÑÑÑ
       ÑимволиÑеÑкими ÑÑÑлками) меÑÑа могÑÑ
       измениÑÑÑÑ. ÐÑой ÑоÑÑÑзаÑелÑноÑÑи можно
       избежаÑÑ Ð¾ÑкÑÑв ÑайловÑй деÑкÑипÑоÑ
       каÑалога назнаÑениÑ, и заÑем Ñказав ÑÑоÑ
       ÑайловÑй деÑкÑипÑÐ¾Ñ Ð² аÑгÑменÑе dirfd вÑзова
       (Ñкажем) fstatat(2) и openat().

       Ðо-вÑоÑÑÑ, openat() позволÑÐµÑ ÑеализоваÑÑ
       оÑделÑнÑй «ÑекÑÑий ÑабоÑий каÑалог» длÑ
       каждой ниÑи поÑÑедÑÑвом Ñайлового
       деÑкÑипÑоÑа, ÑопÑовождаемого пÑиложением.
       ÐÑа возможноÑÑÑ Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÑÑена Ñ
       иÑполÑзованием /proc/self/fd/dirfd, но менее
       ÑÑÑекÑивно.

   O_DIRECT
       Флаг O_DIRECT Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÐºÐ»Ð°Ð´ÑваÑÑ Ð¾Ð³ÑаниÑениÑ
       по вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð½Ð° Ð´Ð»Ð¸Ð½Ñ Ð¸ адÑÐµÑ Ð±ÑÑеÑа
       полÑзоваÑелÑÑкого пÑоÑÑÑанÑÑва и ÑмеÑениÑ
       Ñайла пÑи вводе-вÑводе. Ð Linux огÑаниÑениÑ
       по вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ ÑазлиÑÐ½Ñ Ñ ÑазнÑÑ ÑайловÑÑ
       ÑиÑÑем и веÑÑий ÑдÑа, и даже могÑÑ
       оÑÑÑÑÑÑвоваÑÑ. Ðднако ÑейÑÐ°Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ
       незавиÑимого Ð¾Ñ Ñайловой ÑиÑÑÐµÐ¼Ñ Ð¸Ð½ÑеÑÑейÑа
       пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ Ð¾Ð³ÑаниÑений
       на опÑеделÑннÑй Ñайл или ÑайловÑÑ ÑиÑÑемÑ.
       ÐекоÑоÑÑе ÑайловÑе ÑиÑÑÐµÐ¼Ñ Ð¿ÑедоÑÑавлÑÑÑ Ñвои
       ÑобÑÑвеннÑе инÑеÑÑейÑÑ Ð´Ð»Ñ ÑÑого, напÑимеÑ,
       опеÑаÑÐ¸Ñ XFS_IOC_DIOINFO в xfsctl(3).

       Ð Linux 2.4 ÑазмеÑÑ Ð¿ÐµÑедаÑи, вÑÑавнивание
       полÑзоваÑелÑÑкого бÑÑеÑа и Ñайлового
       ÑмеÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÐºÑаÑÐ½Ñ ÑазмеÑÑ
       логиÑеÑкого блока Ñайловой ÑиÑÑемÑ. ÐаÑинаÑ
       Ñ Linux 2.6 доÑÑаÑоÑно вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾
       512-байÑовой гÑаниÑе. Ð Ð°Ð·Ð¼ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкого
       блока можно опÑеделиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ioctl(2) и
       опеÑаÑии BLKSSZGET или Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ:

           blockdev --getss

       Ðвод-вÑвод Ñ O_DIRECT никогда не должен
       запÑÑкаÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно Ñ ÑиÑÑемнÑм вÑзовом
       fork(2), еÑли бÑÑÐµÑ Ð¿Ð°Ð¼ÑÑи ÑвлÑеÑÑÑ Ð·Ð°ÐºÑÑÑÑм
       оÑобÑажением (Ñ. е., лÑбÑм оÑобÑажениÑм,
       ÑозданнÑм Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ mmap(2) Ñ Ñлагом MAP_PRIVATE; к
       ним оÑноÑиÑÑÑ Ð¿Ð°Ð¼ÑÑÑ, вÑÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´ кÑÑÑ Ð¸
       ÑÑаÑиÑеÑки вÑделеннÑе бÑÑеÑÑ). ÐÑбой подобнÑй
       ввод-вÑвод, пÑедоÑÑавленнÑй ÑеÑез
       аÑинÑÑоннÑй инÑеÑÑÐµÐ¹Ñ Ð¸Ð»Ð¸ из дÑÑгой ниÑи
       пÑоÑеÑÑа, должен вÑполниÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð´Ð¾
       вÑзова fork(2). РпÑоÑивном ÑлÑÑае, можеÑ
       пÑоизойÑи повÑеждение даннÑÑ Ð¸
       непÑедÑказÑемое поведение в пÑоÑеÑÑе
       ÑодиÑÐµÐ»Ñ Ð¸ поÑомка.Ðанное огÑаниÑение не
       дейÑÑвÑеÑ, еÑли бÑÑÐµÑ Ð¿Ð°Ð¼ÑÑи Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð°-вÑвода
       Ñ O_DIRECT бÑл Ñоздан Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ shmat(2) или mmap(2) Ñ
       Ñлагом MAP_SHARED. РпÑи ÑÑом ÑÑо огÑаниÑение не
       дейÑÑвÑеÑ, когда бÑÑÐµÑ Ð¿Ð°Ð¼ÑÑи бÑл помеÑен
       (advised) как MADV_DONTFORK Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ madvise(2), еÑли
       ÑоÑно извеÑÑно, ÑÑо он не бÑÐ´ÐµÑ Ð´Ð¾ÑÑÑпен
       поÑÐ¾Ð¼ÐºÑ Ð¿Ð¾Ñле fork(2).

       Флаг O_DIRECT поÑвилÑÑ Ð² SGI IRIX, где огÑаниÑениÑ
       на вÑÑавнивание Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ Linux 2.4. Ð IRIX Ñакже
       еÑÑÑ Ð²Ñзов fcntl(2) Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа знаÑений
       ÑооÑвеÑÑÑвÑÑÑего вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑазмеÑов. Ð
       FreeBSD 4.x поÑвилÑÑ Ñлаг Ñ Ñаким же именем, но
       без огÑаниÑений на вÑÑавнивание.

       ÐоддеÑжка O_DIRECT добавлена в ÑдÑо Linux веÑÑии
       2.4.10. Ðолее ÑÑаÑÑе ÑдÑа Linux пÑоÑÑо игноÑиÑÑÑÑ ÑÑоÑ
       Ñлаг. РнекоÑоÑÑÑ ÑайловÑÑ ÑиÑÑÐµÐ¼Ð°Ñ ÑÑÐ¾Ñ Ñлаг
       Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ Ñеализован и open() завеÑÑиÑÑÑ Ñ
       оÑибкой EINVAL пÑи его иÑполÑзовании.

       ÐÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ ÑмеÑÐ¸Ð²Ð°Ð½Ð¸Ñ O_DIRECT
       и обÑÑнÑÑ Ð¾Ð¿ÐµÑаÑий ввода-вÑвода в один Ñайл
       и оÑобенно пеÑекÑÑваÑÑ Ð±Ð°Ð¹ÑовÑе облаÑÑи.
       Ðаже когда ÑÐ°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема пÑавилÑно
       обÑабаÑÑÐ²Ð°ÐµÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÐºÐ¾Ð³ÐµÑенÑноÑÑÑÑ Ð²
       Ñакой ÑиÑÑаÑии, обÑÐ°Ñ Ð¿ÑопÑÑÐºÐ½Ð°Ñ ÑпоÑобноÑÑÑ
       ввода-вÑвода, веÑоÑÑно, бÑÐ´ÐµÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ
       Ñем пÑи иÑполÑзовании какого-Ñо одного из
       ÑÑÐ¸Ñ Ñежимов оÑделÑно. ÐналогиÑно
       пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ ÑмеÑÐ¸Ð²Ð°Ð½Ð¸Ñ mmap(2)
       и пÑÑмого ввода-вÑвода Ð´Ð»Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²ÑÑ
       Ñайлов.

       Ðоведение O_DIRECT на NFS оÑлиÑаеÑÑÑ Ð¾Ñ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ
       ÑайловÑÑ ÑиÑÑем. СÑаÑÑе ÑдÑа и ÑдÑа, наÑÑÑоеннÑе
       опÑеделÑннÑми ÑпоÑобами, могÑÑ Ð½Ðµ
       поддеÑживаÑÑ ÑакÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°ÑиÑ. ÐÑоÑокол NFS
       не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÐµÑедаÑÑ Ñлага на ÑеÑвеÑ,
       поÑÑÐ¾Ð¼Ñ Ð²Ð²Ð¾Ð´-вÑвод Ñ O_DIRECT бÑÐ´ÐµÑ Ð¿ÑопÑÑкаÑÑ
       кÑÑиÑование ÑÑÑÐ°Ð½Ð¸Ñ ÑолÑко на клиенÑе; ÑеÑвеÑ
       вÑÑ Ñавно Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполниÑÑ ÐºÑÑиÑование
       ввода-вÑвода. ÐÐ»Ð¸ÐµÐ½Ñ Ð¿ÑоÑÐ¸Ñ ÑеÑÐ²ÐµÑ Ð²ÑполнÑÑÑ
       опеÑаÑии ввода-вÑвода ÑинÑÑонно длÑ
       ÑоÑÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑинÑÑонной ÑеманÑики O_DIRECT.
       ÐекоÑоÑÑе ÑеÑвеÑÑ Ð±ÑдÑÑ Ð²ÑполнÑÑÑ ÑÑо плоÑо пÑи
       опÑеделÑннÑÑ ÑÑловиÑÑ, оÑобенно еÑли ÑазмеÑ
       даннÑÑ Ð²Ð²Ð¾Ð´Ð°-вÑвода невелик. ÐекоÑоÑÑе
       ÑеÑвеÑÑ Ñакже могÑÑ Ð±ÑÑÑ Ð½Ð°ÑÑÑÐ¾ÐµÐ½Ñ Ð½Ð° оÑпÑавкÑ
       ложного оÑвеÑа клиенÑам о Ñом, ÑÑо
       ввод-вÑвод пÑоизведÑн на ноÑиÑелÑ; ÑÑо
       позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¿Ð¾ÑеÑи
       пÑоизводиÑелÑноÑÑи, но еÑÑÑ ÑиÑк поÑеÑи
       ÑелоÑÑноÑÑи даннÑÑ Ð² ÑлÑÑае пÑоблем Ñ
       ÑлекÑÑопиÑанием ÑеÑвеÑа. Ð Linux ÐºÐ»Ð¸ÐµÐ½Ñ NFS не
       ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¾Ð³ÑаниÑений по вÑÑавниваниÑ
       пÑи вводе-вÑводе Ñ O_DIRECT.

       Флаг O_DIRECT ÑвлÑеÑÑÑ Ð¿Ð¾ÑенÑиалÑно моÑнÑм
       инÑÑÑÑменÑом, коÑоÑÑй нÑжно иÑполÑзоваÑÑ Ñ
       оÑÑоÑожноÑÑÑÑ. РекомендÑеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑиложениÑ
       ÑÑиÑали иÑполÑзование O_DIRECT как паÑамеÑÑ
       пÑоизводиÑелÑноÑÑи, коÑоÑÑй по ÑмолÑаниÑ
       вÑклÑÑен.

              «The thing that has always disturbed me about O_DIRECT is that
              the whole interface is just stupid, and was probably designed by
              a deranged monkey on some serious mind-controlling substances.»
              â Linus (ÐÐµÐ½Ñ Ð²Ñегда беÑпокоило кое-ÑÑо
              оÑноÑиÑелÑно O_DIRECT â Ñо, ÑÑо вообÑе в
              Ñелом ÑÑÐ¾Ñ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Ð¿ÑоÑÑо идиоÑиÑен.
              СоздаÑÑÑÑ Ð²Ð¿ÐµÑаÑление, ÑÑо он как-Ð±Ñ Ð±Ñл
              Ñоздан ÑÑмаÑÑедÑей обезÑÑной под
              веÑеÑÑвами.)

ÐÐФÐÐТЫ
       Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ вклÑÑиÑÑ
       ÑигналÑное ÑпÑавление вводом-вÑводом,
       Ñказав O_ASYNC пÑи вÑзове open(); ÑÑÐ¾Ð±Ñ ÑÑÑановиÑÑ
       ÑÑÐ¾Ñ Ñлаг иÑполÑзÑйÑе fcntl(2).

       ÐÐ»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑдÑом O_TMPFILE
       нÑжно пÑовеÑÑÑÑ Ð´Ð²Ð° ÑазлиÑнÑÑ ÐºÐ¾Ð´Ð° оÑибок â
       EISDIR и ENOENT.

       ÐÑи Ñказании Ñлагов O_CREAT и O_DIRECTORY в flags, и
       пÑи ÑÑом ÑказаннÑй в pathname Ñайл не ÑÑÑеÑÑвÑеÑ,
       open() ÑоздаÑÑ Ð¾Ð±ÑÑнÑй Ñайл (Ñо еÑÑÑ Ñлаг O_DIRECTORY
       бÑÐ´ÐµÑ Ð¿ÑоигноÑиÑован).

СÐÐТРÐТРТÐÐÐÐ
       chmod(2), chown(2), close(2), dup(2), fcntl(2), link(2), lseek(2),
       mknod(2), mmap(2), mount(2), open_by_handle_at(2), read(2), socket(2),
       stat(2), umask(2), unlink(2), write(2), fopen(3), acl(5), fifo(7),
       path_resolution(7), symlink(7)



Linux                             2016-07-17                           OPEN(2)