open

open(2)                        2007-10-27-16:31                        open(2)



ÐÐÐÐÐ
       open, creat - вÑдкÑиваÑÑÑ Ñ, по можливоÑÑÑ, ÑÑвоÑÑÑÑÑ
       Ñайл або пÑиÑÑÑÑй


СÐÐТÐÐСÐС
       #include <sys/types.h>

       #include <sys/stat.h>

       #include <fcntl.h>

       Ñnt open(const char *pathname, int flags);

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

       Ñnt creat(const char *pathname, mode_t mode);


ÐÐÐС
       Ðиклик open() викоÑиÑÑовÑÑÑÑÑÑ, Ñоб пеÑеÑвоÑиÑи
       ÑлÑÑ Ð´Ð¾ ÑÐ°Ð¹Ð»Ñ Ñ Ð´ÐµÑкÑипÑÐ¾Ñ ÑÐ°Ð¹Ð»Ñ (невелике
       додаÑÐ½Ñ ÑÑле ÑиÑло, Ñо викоÑиÑÑовÑÑÑÑÑÑ Ð·
       викликами read Ñ write Ð´Ð»Ñ Ð¿Ð¾ÑлÑдовного
       вводÑ/виводÑ). ЯкÑо ÑиÑÑемний виклик
       маÑиме ÑÑпÑÑ, повеÑнÑÑий Ñайловий деÑкÑипÑоÑ
       бÑде найменÑим деÑкÑипÑоÑом Ñо Ñе не бÑло
       вÑдкÑиÑо пÑоÑеÑом. Цей виклик ÑÑвоÑиÑÑ Ð½Ð¾Ð²Ð¸Ð¹
       вÑдкÑиÑий Ñайл не подÑлений з жодним
       ÑнÑими пÑоÑеÑом (але ÑпÑлÑÐ½Ñ Ñайли можÑÑÑ
       виникнÑÑи завдÑки ÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ fork(2)).
       Ðовий деÑкÑипÑÐ¾Ñ ÑÐ°Ð¹Ð»Ñ Ð·Ð°Ð»Ð¸ÑаÑимеÑÑÑÑ Ñакож
       вÑдкÑиÑим пÑи Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑÑнкÑÑй exec(2) (дивÑÑÑÑÑ
       fcntl(2)). ÐокажÑик вÑÑановлÑÑÑÑÑÑ Ð½Ð° поÑаÑкÑ
       ÑайлÑ.

       ÐаÑамеÑÑ flags - Ñе один з пÑапоÑÑÑв: O_RDONLY, O_WRONLY
       або O_RDWR, Ñо, вÑдповÑдно, вÑдкÑиваÑÑÑ Ñайл
       "ÑÑлÑки Ð´Ð»Ñ ÑиÑаннÑ", "ÑÑлÑки Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑ" або ж
       "Ð´Ð»Ñ ÑиÑÐ°Ð½Ð½Ñ Ñ Ð·Ð°Ð¿Ð¸ÑÑ" Ñ ÑÐºÑ ÑкладаÑÑÑÑÑ Ð·Ð°
       Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¿Ð¾Ð±ÑÑÐ¾Ð²Ð¾Ñ Ð¾Ð¿ÐµÑаÑÑÑ OR з ÑакиÑ
       знаÑенÑ, Ñк:


       O_CREAT
               ЯкÑо Ñайл не ÑÑнÑÑ, Ñо його бÑде
              ÑÑвоÑено. ÐлаÑник (ID коÑиÑÑÑваÑа) ÑайлÑ
              вÑÑановлÑÑÑÑÑÑ Ð´Ð¾ дÑйÑного
              коÑиÑÑÑваÑÑкого ID пÑоÑеÑÑ. ÐÑÑпа (ID гÑÑпи)
              вÑÑановлÑÑÑÑÑÑ Ð´Ð¾ знаÑÐµÐ½Ð½Ñ ID гÑÑпи пÑоÑеÑÑ,
              або ж до знаÑÐµÐ½Ð½Ñ ID гÑÑпи баÑÑкÑвÑÑкого
              каÑÐ°Ð»Ð¾Ð³Ñ (залежиÑÑ Ð²Ñд ÑÐ¸Ð¿Ñ ÑайловоÑ
              ÑиÑÑеми, паÑамеÑÑÑв пÑиÑÐ´Ð½Ð°Ð½Ð½Ñ (mount) Ñ
              ÑÐµÐ¶Ð¸Ð¼Ñ Ð±Ð°ÑÑкÑвÑÑкого каÑалогÑ, дивÑÑÑÑÑ,
              опÑÑÑ Ð¼Ð¾Ð½ÑÑÐ²Ð°Ð½Ð½Ñ bsdgroups Ñ sysvgroups, опиÑÐ°Ð½Ñ Ñ
              mount(8)).


       O_EXCL
               ЯкÑо викоÑиÑÑовÑÑÑÑÑÑ Ñазом з O_CREAT, Ñо пÑи
              наÑвноÑÑÑ Ð²Ð¶Ðµ ÑÑвоÑеного ÑÐ°Ð¹Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸Ðº
              open виклиÑе помилкÑ. У ÑÑÐ¾Ð¼Ñ ÑÑан, пÑи
              ÑÑнÑÑÑÐ¾Ð¼Ñ ÑимволÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ðµ
              звеÑÑаÑÑÑÑÑ Ñвага, на Ñо вÑн вказÑÑ. O_EXCL
              не пÑаÑÑÑ Ñ ÑÐ°Ð¹Ð»Ð¾Ð²Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ NFS, а в
              пÑогÑамаÑ, Ñо викоÑиÑÑовÑÑÑÑ Ñей пÑапоÑ
              Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÑваннÑ, виникне ÑÑан пеÑегонÑв
              (race conditÑon). ÐиÑÑÑеннÑм аÑомаÑного
              блокÑÐ²Ð°Ð½Ð½Ñ ÑÐ°Ð¹Ð»Ñ Ð±Ñде - ÑÑвоÑиÑи Ñайл з
              ÑнÑкалÑним Ñм'Ñм ÑÑй ÑамÑй ÑайловÑй
              ÑиÑÑÐµÐ¼Ñ (Ñе Ñм'Ñ Ð¼Ð¾Ð¶Ðµ мÑÑÑиÑи, напÑиклад,
              Ð½Ð°Ð·Ð²Ñ Ð¼Ð°Ñини й ÑденÑиÑÑкаÑÐ¾Ñ Ð¿ÑоÑеÑÑ),

              викоÑиÑÑовÑÑÑи link(2), Ð´Ð»Ñ ÑÑвоÑеннÑ
              поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñайл блокÑваннÑ. ЯкÑо link()
              повеÑÑÐ°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ 0, блокÑÐ²Ð°Ð½Ð½Ñ Ð²Ð´Ð°Ð»Ð¾ÑÑ.
              У пÑоÑÐ¸Ð»ÐµÐ¶Ð½Ð¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ, викоÑиÑÑовÑйÑе
              stat(2), Ñоб пеÑеконаÑиÑÑ, Ñо кÑлÑкÑÑÑÑ
              поÑÐ¸Ð»Ð°Ð½Ñ Ð½Ð° ÑнÑкалÑний Ñайл зÑоÑло до
              двоÑ. Це Ñакож ознаÑаÑ, Ñо блокÑваннÑ
              мало ÑÑпÑÑ.


       O_NOCTTY
               ЯкÑо pathname вказÑÑ Ð½Ð° ÑеÑмÑналÑний
              пÑиÑÑÑÑй (дивÑÑÑÑÑ tty(4)), Ñо воно не ÑÑане
              кеÑÑвалÑним ÑеÑмÑналом пÑоÑеÑÑ, навÑÑÑ
              ÑкÑо пÑоÑÐµÑ Ð½Ðµ Ð¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¾Ð³Ð¾.


       O_TRUNC
               ЯкÑо Ñайл вже ÑÑнÑÑ, Ñ Ð·Ð²Ð¸Ñайним Ñайлом
              Ñ Ñежим, Ñ ÑÐºÐ¾Ð¼Ñ Ð¹Ð¾Ð³Ð¾ вÑдкÑиÑо, дозволÑÑ
              Ð·Ð°Ð¿Ð¸Ñ Ð² Ñей Ñайл (ÑобÑо вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ O_RDWR
              або O_WRONLY), Ñо його довжина бÑде зÑÑнÑÑа
              до нÑлÑ. ЯкÑо ж Ñайл ÑвлÑÑÑÑÑÑ ÐºÐ°Ð½Ð°Ð»Ð¾Ð¼ FÐFO
              або ÑеÑмÑналÑним пÑиÑÑÑоÑм, Ñо Ñей пÑапоÑ
              ÑгноÑÑваÑимеÑÑÑÑ. Ð ÑеÑÑÑ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв, дÑÑ
              пÑапоÑа O_TRUNC не визнаÑено.


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


       O_NONBLOCK або O_NDELAY
               Ðоли можливо, Ñайл вÑдкÑиваÑимеÑÑÑÑ Ñ
              ÑÐµÐ¶Ð¸Ð¼Ñ non-blocking. ÐÑ open, Ð½Ñ ÑнÑÑ Ð½Ð°ÑÑÑпнÑ
              опеÑаÑÑÑ Ð½Ð°Ð´ повеÑнÑÑим деÑкÑипÑоÑом
              ÑÐ°Ð¹Ð»Ñ Ð½Ðµ змÑÑÑÑÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°ÑÑий пÑоÑеÑ
              ÑекаÑи. ÐÐ»Ñ ÑобоÑи з каналами FÐFO дивÑÑÑÑÑ
              Ñакож fifo(4). Цей Ñежим не повинен маÑи
              Ð¶Ð¾Ð´Ð½Ð¾Ñ Ð´ÑÑ Ð½Ð° Ñайли за виклÑÑеннÑм FIFO.


       O_SYNC
               Файл вÑдкÑиваÑÑÑÑÑ Ñ ÑÐµÐ¶Ð¸Ð¼Ñ ÑинÑÑонного
              вводÑ-виводÑ. ÐÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸ write длÑ
              вÑдповÑдного деÑкÑипÑоÑа ÑÐ°Ð¹Ð»Ñ Ð±Ð»Ð¾ÐºÑÑÑÑ
              викликаÑÑий пÑоÑÐµÑ Ð´Ð¾Ñи, доки Ð´Ð°Ð½Ñ Ð½Ðµ
              бÑде ÑÑзиÑно запиÑано. Ðднак, вам
              необÑÑдно пÑоÑиÑаÑи Ñакож ÑоздÑл ÐÐÐÐÐÐÐÐЯ
              нижÑе.


       O_NOFOLLOW
               ЯкÑо pathname - Ñе ÑимволÑне поÑиланнÑ, Ñо
              open Ð·Ð°Ð·Ð½Ð°Ñ Ð¿Ð¾Ñазки. Це ÑозÑиÑÐµÐ½Ð½Ñ FreeBSD,
              Ñо бÑло додано до LÑnux веÑÑÑÑ 2.1.126. ÐÑÑ ÑнÑÑ
              ÑимволÑÐ½Ñ Ð¿Ð¾ÑиланнÑ, Ñо ÑкладаÑÑÑ ÑлÑÑ Ð´Ð¾
              ÑайлÑ, бÑдÑÑÑ Ð¾Ð±ÑÐ¾Ð±Ð»ÐµÐ½Ñ Ñк звиÑайно.
              Ðаголовки з glibc веÑÑÑÑ 2.0.100 мÑÑÑÑÑÑ
              визнаÑÐµÐ½Ð½Ñ ÑÑого пÑапоÑа. ЯдÑа,
              попеÑÐµÐ´Ð½Ñ Ð²ÐµÑÑÑÑ 2.1.126, ÑгноÑÑÑÑÑ Ñей
              пÑапоÑ.


       O_DÐRECTORY
               ЯкÑо pathname не Ñ ÐºÐ°Ñалогом, Ñо open зазнаÑ
              невдаÑÑ. Цей пÑÐ°Ð¿Ð¾Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑÑÑ
              ÑÑлÑки Ñ LÑnuxÑ Ð±Ñло додано до ÑдÑа 2.1.126,
              Ñоб ÑникнÑÑи пÑоблем з вÑдмови вÑд
              обÑлÑговÑваннÑ, DoS, ÑкÑо opendir(2) бÑло
              викликано Ð´Ð»Ñ ÐºÐ°Ð½Ð°Ð»Ñ FÐFO або
              ÑÑÑÑÑкового пÑиÑÑÑоÑ. Цей пÑÐ°Ð¿Ð¾Ñ Ð½Ðµ ÑлÑд
              викоÑиÑÑовÑваÑи поза вÑÑленнÑм opendir.


       O_DIRECT
               ÐамагаÑимеÑÑÑÑ Ð·Ð¼ÐµÐ½ÑиÑи еÑÐµÐºÑ ÐºÐµÑÑваннÑ
              опеÑаÑÑй вводÑ-виводÑ. Як пÑавило, Ñе
              знижÑÑ ÐµÑекÑивнÑÑÑÑ, але викоÑиÑÑовÑÑÑÑÑÑ Ñ
              ÑпеÑÑалÑÐ½Ð¸Ñ ÑиÑÑаÑÑÑÑ, напÑиклад коли
              аплÑкаÑÑÑ Ð·Ð°ÑÑоÑовÑÑÑÑ Ð²Ð»Ð°Ñне кеÑÑваннÑ.
              ÐвÑд-вивÑд до Ñайла здÑйÑнÑÑÑÑÑÑ
              безпоÑеÑеднÑо з/Ñ Ð±ÑÑеÑи коÑиÑÑÑваÑÑкого
              пÑоÑÑоÑÑ. ÐвÑд-вивÑд бÑде ÑинÑÑонним,
              ÑобÑо пÑÑÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾
              ÑиÑÑемного Ð²Ð¸ÐºÐ»Ð¸ÐºÑ read(2) Ñ write(2), данÑ
              гаÑанÑовано бÑде пеÑедано. Ð Linux 2.4,
              ÑозмÑÑ Ð´Ð°Ð½Ð¸Ñ, Ñо пеÑедаÑÑÑÑÑ, а Ñакож
              Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ ÐºÐ¾ÑиÑÑÑваÑÑкого бÑÑеÑÑ Ñ
              пеÑемÑÑÐµÐ½Ð½Ñ Ð¿Ð¾ ÑÐ°Ð¹Ð»Ñ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи
              помноженими на ÑозмÑÑ Ð»Ð¾Ð³ÑÑного блокÑ
              ÑÐ°Ð¹Ð»Ð¾Ð²Ð¾Ñ ÑиÑÑеми. Ð Linux 2.6, виÑÑаÑиÑÑ
              ÑозмÑÑÑ Ð² 512 байÑÑв. ÐодÑбний ÑеманÑикоÑ
              ÑнÑеÑÑÐµÐ¹Ñ Ð´Ð¾ Ð±Ð»Ð¾ÐºÐ¾Ð²Ð¸Ñ Ð¿ÑиÑÑÑоÑв опиÑано Ñ
              raw(8).


       O_ASYNC
               ÐидаваÑиме Ñигнал (Ñипово SIGIO, але Ñе
              можна змÑниÑи з Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ fcntl(2)) коли
              ÑÑаÑÑÑ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¼Ð¸ опеÑаÑÑÑ Ð²Ð²Ð¾Ð´Ñ-виводÑ
              Ñодо ÑÑого деÑкÑипÑоÑÑ ÑайлÑ. Ð¦Ñ ÑиÑа
              доÑÑÑпна лиÑе Ð´Ð»Ñ ÑеÑмÑналÑв,
              пÑевдо-ÑеÑмÑналÑв Ñ ÑокеÑÑв. ÐивÑÑÑÑÑ Ñакож
              fcntl(2) Ð´Ð»Ñ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¸Ñ Ð´ÐµÑалей.


       O_LARGEFÐLE
               Ðа 32-бÑÑÐ½Ð¸Ñ ÑиÑÑемаÑ, Ñо пÑдÑÑимÑÑÑÑ ÐбÑиÑнÑ
              ÑÐ°Ð¹Ð»Ð¾Ð²Ñ ÑиÑÑеми (Large File Systems), Ñей пÑапоÑ
              дозволÑÑ Ð²ÑдкÑиваÑи Ñайли, довжина
              ÑÐºÐ¸Ñ Ð±ÑлÑÑa за 31 бÑÑ.

              ÐеÑÐºÑ Ð· виÑевказаниÑ, необов'ÑзковиÑ
              пÑапоÑÑв можÑÑÑ Ð±ÑÑи змÑÐ½ÐµÐ½Ñ Ð·Ð°
              Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ fctnl пÑÑÐ»Ñ Ð²ÑдкÑиÑÑÑ ÑайлÑ.

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

              ÐаÑÑÑÐ¿Ð½Ñ ÑимволÑÐ½Ñ ÐºÐ¾Ð½ÑÑанÑи можна
              викоÑиÑÑовÑваÑи Ð´Ð»Ñ mode:


       S_ÐRWXU
               00700 коÑиÑÑÑÐ²Ð°Ñ (влаÑник ÑайлÑ) маÑ
              дозвÑл на ÑиÑаннÑ, Ð·Ð°Ð¿Ð¸Ñ Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ
              ÑайлÑ.

       S_ÐRUSR (S_ÐREAD)
               00400 коÑиÑÑÑÐ²Ð°Ñ Ð¼Ð°Ñ Ð´Ð¾Ð·Ð²Ñл на ÑиÑаннÑ
              ÑайлÑ.

       S_ÐWUSR (S_ÐWRÐTE)
               00200 коÑиÑÑÑÐ²Ð°Ñ Ð¼Ð°Ñ Ð´Ð¾Ð·Ð²Ñл на Ð·Ð°Ð¿Ð¸Ñ Ñ
              Ñайл.

       S_ÐXUSR (S_ÐEXEC)
               00100 коÑиÑÑÑÐ²Ð°Ñ Ð¼Ð°Ñ Ð´Ð¾Ð·Ð²Ñл на виконаннÑ
              ÑайлÑ.

       S_ÐRWXG
               00070 гÑÑпа Ð¼Ð°Ñ Ð´Ð¾Ð·Ð²Ñл на ÑиÑаннÑ,
              Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ Ð·Ð°Ð¿Ð¸Ñ ÑайлÑ.

       S_ÐRGRP
               00040 гÑÑпа Ð¼Ð°Ñ Ð´Ð¾Ð·Ð²Ñл на ÑиÑÐ°Ð½Ð½Ñ ÑайлÑ.

       S_ÐWGRP
               00020 гÑÑпа Ð¼Ð°Ñ Ð´Ð¾Ð·Ð²Ñл на Ð·Ð°Ð¿Ð¸Ñ ÑайлÑ.

       S_ÐXGRP
               00010 гÑÑпа Ð¼Ð°Ñ Ð´Ð¾Ð·Ð²Ñл на виконаннÑ
              ÑайлÑ.

       S_ÐRWXO
               00007 вÑÑ ÑнÑÑ Ð¼Ð°ÑÑÑ Ð´Ð¾Ð·Ð²Ñл на ÑиÑаннÑ,
              Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑÐ°Ð¹Ð»Ñ Ñ Ð·Ð°Ð¿Ð¸Ñ.

       S_ÐROTH
               00004 вÑÑ ÑнÑÑ Ð¼Ð°ÑÑÑ Ð´Ð¾Ð·Ð²Ñл на ÑиÑÐ°Ð½Ð½Ñ ÑайлÑ.

       S_ÐWOTH
               00002 вÑÑ ÑнÑÑ Ð¼Ð°ÑÑÑ Ð´Ð¾Ð·Ð²Ñл на Ð·Ð°Ð¿Ð¸Ñ ÑайлÑ.

       S_ÐXOTH
               00001 вÑÑ ÑнÑÑ Ð¼Ð°ÑÑÑ Ð´Ð¾Ð·Ð²Ñл на виконаннÑ
              ÑайлÑ.

              mode завжди повинен бÑÑи зазнаÑений
              пÑи викоÑиÑÑÐ°Ð½Ð½Ñ O_CREAT Ñ Ð¿ÑапоÑÑÑÑ flags; Ñ
              вÑÑÑ ÑнÑÐ¸Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ°Ñ Ñей паÑамеÑÑ
              ÑгноÑÑÑÑÑÑÑ.

              creat ÑÑвнознаÑне open з flags ÑÑвними
              O_CREAT|O_WRONLY|O_TRUNC.


ÐÐÐÐÐ ÐÐÐÐ ÐÐÐЧÐÐÐЯ
       open Ñ creat повеÑÑаÑÑÑ Ð½Ð¾Ð²Ð¸Ð¹ деÑкÑипÑÐ¾Ñ ÑайлÑ
       або -1 Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ (знаÑÐµÐ½Ð½Ñ Ð·Ð¼ÑнноÑ
       errno Ñакож вÑÑановиÑÑÑÑ Ð½Ð°Ð»ÐµÐ¶Ð½Ð¸Ð¼ Ñином).
       ÐаÑважÑе, Ñо open може вÑдкÑиваÑи Ñайли
       пÑиÑÑÑоÑв, але creat не може ÑÑвоÑÑваÑи ÑÑ, ÑомÑ
       викоÑиÑÑовÑйÑе ÑÑнкÑÑÑ mknod(2) Ð´Ð»Ñ ÑÐ¸Ñ ÑÑлей.

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

       ЯкÑо ÑÑвоÑÑÑÑÑÑÑ Ñайл, Ñо його ÑÐ°Ñ Ð¾ÑÑаннÑого
       доÑÑÑÐ¿Ñ (atime), ÑÑвоÑÐµÐ½Ð½Ñ (ctime) Ñ Ð¼Ð¾Ð´Ð¸ÑÑкаÑÑÑ (mtime)
       вÑÑановлÑÑÑÑÑÑ Ð´Ð¾ знаÑÐµÐ½Ð½Ñ Ð¿Ð¾ÑоÑного ÑаÑÑ, Ñак
       Ñамо Ð¿Ð¾Ð»Ñ ÑаÑÑ Ð¼Ð¾Ð´Ð¸ÑÑкаÑÑÑ Ñ ÑÑвоÑеннÑ
       баÑÑкÑвÑÑкого каÑалогÑ. ЯкÑо Ñайл змÑнÑÑÑÑÑÑ
       з-за пÑапоÑÑÑ O_TRUNC, Ñой його ÑÐ°Ñ ÑÑвоÑÐµÐ½Ð½Ñ Ñ ÑаÑ
       змÑни Ñеж вÑÑановлÑÑÑÑÑÑ Ð´Ð¾ знаÑеннÑ
       поÑоÑного ÑаÑÑ.


ÐÐÐÐ ÐÐÐÐÐÐÐ
       EEXÐST
               pathname вже ÑÑнÑÑ, але бÑли викоÑиÑÑанÑ
              O_CREAT Ñ O_EXCL.


       EÐSDÐR
               Тип доÑÑÑÐ¿Ñ Ð¼Ð°Ñ Ð½Ð° ÑÐ²Ð°Ð·Ñ Ð·Ð°Ð¿Ð¸Ñ, але
              pathname вказÑÑ Ð½Ð° каÑалог, (ÑобÑо
              вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ O_WRONLY або O_RDWR).


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


       ENAMETOOLONG
               pathname ÑвлÑÑÑÑÑÑ Ð·Ð°Ð½Ð°Ð´Ñо довгим.


       ENOENT
               O_CREAT не вÑÑановлено Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð³Ð¾ ÑайлÑ
              не ÑÑнÑÑ. Ðбо ÑкийÑÑ ÐºÐ°Ñалог, вказаний Ñ
              ÑлÑÑÑ pathname вÑдÑÑÑнÑй або Ñ Ð½ÐµÐ´ÑйÑним
              ÑимволÑÑним поÑиланнÑм.


       ENOTDÐR
               Складова ÑлÑÑÑ Ñо познаÑена Ñк каÑалог
              Ñ pathname, не Ñ Ð½Ð¸Ð¼ наÑпÑавдÑ, або бÑло
              вказано пÑапоÑеÑÑ O_DÐRECTORY, ÑÐ¾Ð´Ñ Ñк pathname
              не Ñ ÐºÐ°Ñалогом.


       ENXÐO
               ÐÑÑановлено O_NONBLOCK | O_WRONLY, Ñайл Ñ
              каналом FÐFO, але Ð½ÐµÐ¼Ð°Ñ Ð¿ÑоÑеÑÑв, ÑÐºÑ Ð±
              вÑдкÑили Ñей канал Ð´Ð»Ñ ÑиÑаннÑ. Ðожливо
              Ñакож, Ñо Ñайл Ñ Ð¿ÑиÑÑÑоÑвим Ñайлом
              пÑиÑÑÑоÑ, але вÑдповÑдний пÑиÑÑÑÑй не
              вÑÑановлено.


       ENODEV
               pathname поÑилаÑÑÑÑÑ Ð½Ð° Ñайл пÑиÑÑÑоÑ, але
              вÑдповÑдного пÑиÑÑÑÐ¾Ñ Ð½Ðµ ÑÑнÑÑ. (Це
              помилка ÑдÑа LÑnux: повинен повеÑÑаÑиÑÑ
              пoмилка ENXÐO).


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


       ETXTBSY
               pathname поÑилаÑÑÑÑÑ Ð½Ð° Ñайл, Ñо Ñ Ð´Ð°Ð½Ð¸Ð¹ ÑаÑ
              виконÑÑÑÑÑÑ, Ñ Ð²ÑдбÑвÑÑ Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° запиÑ.


       EFAULT
               pathname вказÑÑ Ð½Ð° каÑалог за межами
              доÑÑÑпного адÑеÑного пÑоÑÑоÑÑ.


       ELOOP
               ÐанадÑо багаÑо ÑимволÑÐ½Ð¸Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ñ Ñ
              ÑпÑÐ¾Ð±Ñ Ñозв'ÑзаÑи pathname, або бÑло
              вказано пÑÐ°Ð¿Ð¾Ñ O_NOFOLLOW, а pathname Ñ
              ÑимволÑÑним поÑиланнÑм.


       ENOSPC
               Ðа пÑиÑÑÑоÑ, Ñо ÑÑÑимÑваÑиме Ñайл
              вказаний pathname не залиÑилоÑÑ Ð¼ÑÑÑÑ.


       ENOMEM
               ÐедоÑÑаÑнÑо ÑиÑÑÐµÐ¼Ð½Ð¾Ñ Ð¿Ð°Ð¼'ÑÑÑ.


       EMFÐLE
               ÐÑоÑÐµÑ Ñже вÑдкÑив макÑималÑно
              пÑипÑÑÑÐ¸Ð¼Ñ ÐºÑлÑкÑÑÑÑ ÑайлÑв.


       ENFÐLE
               ÐоÑÑгнÑÑа межа Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾Ñ ÐºÑлÑкоÑÑÑ
              вÑдкÑиÑÐ¸Ñ ÑайлÑв.


ÐÐÐÐÐÐÐÐÐÐСТЬ СТÐÐÐÐРТÐÐ
       SVr4, SVÐ, POSÐX, X/OPEN, BSD 4.3 ÐÑапоÑÑÑ O_NOFOLLOW Ñ O_DÐRECTORY
       ÑпеÑиÑÑÑÐ½Ñ Ð´Ð»Ñ ÑиÑÑеми LÑnux. Ðони можÑÑÑ Ð±ÑÑи
       ознаÑеними макÑоÑом _GNU_SOURCE.

       ÐÑÑ Ð¿ÑапоÑÑÑв O_RDONLY | O_TRUNC залежиÑÑ Ð²Ñд
       ÑеалÑзаÑÑÑ.  Ðа багаÑÑÐ¾Ñ ÑиÑÑемаÑ, Ñайл бÑде
       зÑÑнÑÑо до нÑлÑового ÑозмÑÑÑ.

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


ÐÐÐÐ
       "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

       У пÑоÑÐ¾ÐºÐ¾Ð»Ñ NFS ÑÑнÑÑ Ð±ÐµÐ·Ð»ÑÑ Ð½ÐµÐ´Ð¾Ñобок, Ñо маÑÑÑ
       вплив на O_SYNC Ñ O_NDELAY.

       POSÐX Ð½Ð°Ð´Ð°Ñ ÑÑи ÑÑÐ·Ð½Ð¸Ñ Ð²Ð°ÑÑанÑи ÑинÑÑонного
       вводÑ-виводÑ, Ñо вÑдповÑдаÑÑÑ Ð¿ÑапоÑÑÑм O_SYNC,
       O_DSYNC Ñ O_RSYNC. Ðа даний Ð¼Ð¾Ð¼ÐµÐ½Ñ (веÑÑÑÑ 2.1.130) ÑÑÑ Ñ
       ÑинонÑмами.


ÐÐÐÐТЬСЯ ТÐÐÐÐ
       read(2), write(2), fcntl(2), close(2), link(2), mknod(2), mount(2),
       stat(2), umask(2), unlink(2), socket(2), fopen(3), fifo(4)

       ---- ÐеÑеклав ÐÑÑалÑй ЦибÑлÑк <vt@uatech.atspace.com>




© 2005-2007 DLOU, GNU FDL     2007-10-27-16:31                        open(2)