Koyi Ƙa'idar Open Linux

Synopsis

#include << A HREF = "fayil: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "fayil: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "fayil: /usr/include/fcntl.h"> fcntl.h> int bude (const char * wayname , int flags ); int bude (const char * wayname , int flags , mode_t yanayin ); int halitta (const char * wayname , mode_t yanayin );

Bayani

Ana amfani da tsarin da aka bude () don amfani da sunan saƙo a cikin wani rubutun fayiloli (ƙananan, wanda ba mai amfani ba ne don amfani a cikin I / O na baya kamar karantawa , rubutu , da dai sauransu). Lokacin da kira ya ci nasara, mai rubutun fayil ɗin ya dawo ya zama babban rubutun fayiloli mafi ƙasƙanci wanda ba a bude yanzu ba don tsari. Wannan kira yana ƙirƙirar sabon fayil ɗin budewa, ba a raba shi da wani tsari ba. (Amma raba fayilolin buɗewa zasu iya fitowa ta hanyar cokali (2) tsarin tsarin.) An saita sabon rubutun fayilolin don buɗewa a cikin ayyukan aikin (duba fcntl (2)). An saita jadawalin fayil zuwa farkon fayil din.

Sifofin saiti na ɗaya daga O_RDONLY , O_WRONLY ko O_RDWR wanda buƙatar bude fayil ɗin kawai-karanta, rubuta-kawai ko karanta / rubutu, bi da bi, bitwise- ko 'd tare da babu ko fiye daga cikin wadannan:

O_CREAT

Idan fayil bai wanzu ba za'a halicce shi. Mai amfani (ID na mai amfani) na fayil ɗin an saita zuwa ID mai amfani mai amfani na tsari. An saita ikon mallakar ƙungiya (ID na ƙungiya) ko dai ga ƙungiyar rukuni mai tasiri na tsari ko zuwa ID na ƙungiyar kulawa na iyaye (dangane da nau'in tsarin fayiloli da jerin zaɓuɓɓuka, da kuma yanayin jagoran iyaye, duba, misali, dutse zaɓuka bsdgroups da sysvgroups na tsarin fayilolin ext2, kamar yadda aka bayyana a dutsen (8)).

O_EXCL

Idan aka yi amfani da O_CREAT , idan fayil ɗin ya riga ya kasance akwai kuskure kuma bude zai kasa. A cikin wannan mahallin, alamar alama tana samuwa, ba tare da la'akari da inda makiyarsa take ba. O_EXCL ya karye akan tsarin NFS , shirye-shiryen da suka dogara da shi don yin ayyuka na kulle zai ƙunshi yanayin tseren. Matsalar da za a yi amfani da makaman nukiliya ta amfani da makullin shine don ƙirƙirar fayil na musamman a kan fs (misali, kunshi sunan mai masauki da pid), amfani da mahada (2) don yin hanyar haɗi zuwa makullin. Idan haɗin () ya dawo 0, kulle yana ci nasara. In ba haka ba, yi amfani da lakabi (2) a kan fayil na musamman don bincika idan yawan haɗin shi ya ƙãra zuwa 2, a cikin haka idan ƙullin ya ci nasara.

O_NOCTTY

Idan hanyar da sunan yana nufin na'urar m - duba tty (4) --- ba zai zama mai sarrafa sarrafa ba koda kuwa tsarin ba shi da ɗaya.

O_TRUNC

Idan fayil ɗin ya wanzu kuma yana da fayil na yau da kullum da yanayin bude wanda zai iya yin rubutu (watau O_RDWR ko O_WRONLY) za a ƙaddara shi zuwa tsawon 0. Idan fayil ɗin FIFO ne ko fayil na na'ura mai kwakwalwa, an manta da tutar O_TRUNC. In ba haka ba, ana iya bayyana sakamakon O_TRUNC. (A kan wasu nau'ikan Linux za a manta da shi, a wasu sigogi, zai dawo da kuskure.)

O_APPEND

An bude fayil din a yanayin da aka tsara. Kafin kowannensu ya rubuta , an saita maɓallin fayil a ƙarshen fayil ɗin, kamar dai tare da lseek . O_APPEND zai iya haifar da fayiloli da aka lalata akan fayilolin NFS idan fiye da ɗaya tsari ya bada bayanai zuwa fayil a lokaci guda. Wannan kuwa saboda NFS ba ta goyan bayan goyon baya ga fayil ɗin ba, don haka kullin abokin ciniki ya ƙaddamar da shi, wanda ba za'a iya yin ba tare da yanayin tsere ba.

O_NONBLOCK ko O_NDELAY

Idan ya yiwu, an bude fayil ɗin a yanayin da ba a rufe shi ba. Babu budewa ko wani aiki na gaba akan rubutun fayil din wanda aka dawo zai sa aikin kira yayi jira. Don kulawa da FIFOs (mai suna pipes), ga kuma fifo (4). Wannan yanayin bai buƙatar samun tasiri akan fayiloli banda FIFOs.

O_SYNC

An bude fayil din don haɗin I / O. Kowane rubutun da aka rubuta a bayanan fayil ɗin zai haifar da hanyar kira har sai an rubuta bayanai zuwa ga matakan da ke ciki. Dubi RESTRICTIONS a ƙasa, ko da yake.

O_NOFOLLOW

Idan wayname yana da alamar alama, to, bude ya kasa. Wannan ƙari ne na FreeBSD, wanda aka ƙara zuwa Linux a cikin version 2.1.126. Abubuwan alamar alaƙa a cikin ɓangarorin farko na hanyar da aka sa wa sunan za a biyo baya. Rubutun kai daga glibc 2.0.100 kuma daga baya sun hada da ma'anar wannan tutar; Kernels kafin 2.1.126 za su yi watsi da shi idan an yi amfani dasu .

O_DIRECTORY

Idan wayname ba shine shugabanci ba, sa bude don kasawa. Wannan tutar yana da takamaiman Linux, an kuma kara shi a cikin kullel version 2.1.126, don kauce wa matsalolin sabis idan an kira na'urar (3) akan FIFO ko na'urar tafeto, amma kada a yi amfani da shi wajen aiwatar da opendir .

O_DIRECT

Yi ƙoƙarin rage girman cache na I / O zuwa kuma daga wannan fayil ɗin. Gaba ɗaya wannan zai lalata aiki, amma yana da amfani a yanayi na musamman, kamar su lokacin da aikace-aikacen ke yin kullun kansu. Ana yin I / O fayil a kai tsaye zuwa / daga mai buƙatun sararin samaniya. I / O yana daidaitawa, watau, a kammala karatun (2) ko rubuta (2) tsarin tsarin, an bada tabbacin cewa an canja shi. Canja wuri mai girma, da daidaitawar buƙatar mai amfani da ƙaddamar fayiloli dole ne dukkanin su kasance masu yawa na girman fasalin tsarin fayil.
Wannan alamar ana goyan baya akan tsarin tsarin UNIX; An ƙara goyon bayan talla a karkashin Linux a kwayar kernel version 2.4.10.
An kwatanta nau'ikan hanyar bincike kamar yadda ake amfani da shi a cikin raw (8).

O_ASYNC

Samar da wata alama (SIGIO ta tsoho, amma za a iya canza wannan ta hanyar fcntl (2)) lokacin da shigarwa ko fitarwa ya yiwu a kan wannan bayanan fayil ɗin. Wannan fasali yana samuwa ne kawai don tashoshi, alamar waya, da kwasfa. Dubi fcntl (2) don ƙarin bayani.

O_LARGEFILE

A kan shirye-shirye 32-bit wanda ke goyan bayan babban fayilolin Fayil din, ba da damar fayiloli waɗanda ba za a iya wakiltar girman su a cikin 31 bits da za a bude.

Za'a iya canza wasu daga cikin zanen na zaɓi ta amfani da fcntl bayan an bude fayil din.

Yanayin ƙayyade yana ƙayyade izini don amfani idan akwai sabon fayil. An gyaggyara shi ta hanyar umask ta hanyar hanyar da ta saba: izinin da aka sanya fayil din (yanayin & ~ umask) . Lura cewa wannan yanayin kawai ya shafi abubuwan da za su iya samun damar zuwa sabuwar sabuwar fayil; kira mai kira wanda ya ƙirƙiri fayilolin karantawa kawai zai iya dawo da bayanan da aka rubuta / rubutu.

Wadannan alamomi na alama suna samarwa don yanayin :

S_IRWXU

00700 mai amfani (mai sarrafa fayil) ya karanta, rubuta da kuma yin izini

S_IRUSR (S_IREAD)

00400 mai amfani ya karanta izini

S_IWUSR (S_IWRITE)

00200 mai amfani ya rubuta izini

S_IXUSR (S_IEXEC)

00100 mai amfani ya kashe izini

S_IRWXG

00070 kungiya ta karanta, rubuta da yin izini

S_IRGRP

00040 kungiyar sun karanta izini

S_IWGRP

00020 kungiyar sun rubuta izini

S_IXGRP

00010 kungiya ta kashe izini

S_IRWXO

00007 wasu sun karanta, rubuta da yin izini

S_IROTH

00004 wasu sun karanta izini

S_IWOTH

00002 wasu sun rubuta izini

S_IXOTH

00001 wasu sun kashe izini

Yanayin dole ne a ƙayyade lokacin da O_CREAT yana cikin saƙo , kuma an ƙyale shi ba haka ba.

Halitta ya kasance daidai da bude tare da launi daidai da O_CREAT | O_WRONLY | O_TRUNC .

RADA DA KUMA

bude da kuma sake dawo da sabon rubutun fayiloli, ko kuma -1 idan kuskure ya faru (a cikin wannan hali, an saita errno daidai). Lura cewa bude iya bude fayiloli na musamman, amma halitta ba zai iya ƙirƙirar su ba - amfani da mknod (2) maimakon.

A kan fayilolin NFS na tare da taswirar UID, bude zai iya dawo da bayanan fayiloli amma kamar karanta (2) buƙatun da aka ƙi tare da EACCES . Wannan shi ne saboda abokin ciniki ya fara bude ta hanyar bincika izini, amma taswirar UID yana aiki da uwar garke a kan karantawa da rubuta buƙatun.

Idan an ƙirƙiri sabon fayil ɗin, ana son saiti, ctime, lokutan filin saiti zuwa lokaci na yanzu, haka kuma lokutan ctime da lokuta na iyayyar iyaye. In ba haka ba, idan an sabunta fayiloli saboda alamar O_TRUNC, ana sanya lokuta ctime da lokutan lokaci zuwa lokaci na yanzu.

Kurakurai

EEXIST

Sunan sunaye sun kasance kuma O_CREAT da O_EXCL an yi amfani dashi.

EISDIR

wayname yana nufin shugabanci da kuma damar da aka buƙaci da aka rubuta (wato, O_WRONLY ko O_RDWR an saita).

EACCES

Ba a yarda da damar shiga fayil ba, ko ɗaya daga cikin kundayen adireshi a cikin sunan name bai yarda da bincike (kashe izinin izini ba, ko fayil bai kasance ba tukuna kuma rubuta damar zuwa ga iyayen iyaye ba a yarda ba.

HAUSA

wayname ya yi tsawo.

GAME

Ba a saita O_CREAT ba kuma babu sunan mai suna. Ko kuma, wani ɓangaren kundin adireshi a cikin hanyar suna ba ya kasance ko yana da alamar alaƙa mai haɗari.

ƘARI

Wani ɓangaren da aka yi amfani da shi azaman shugabanci a cikin sunan suna ba, a gaskiya, wani shugabanci, ko O_DIRECTORY aka ƙayyade kuma sunan da aka ba shi ba jagora ba ne.

ENXIO

O_NONBLOCK | An saita O_WRONLY, sunan mai suna FIFO kuma babu tsari wanda aka bude fayil don karantawa. Ko, fayil ɗin fayil ne na musamman na na'urar kuma babu na'urar da ta dace.

ENODEV

wayname yana nufin fayil na musamman na na'ura kuma babu na'urar da ta dace. (Wannan wani nau'in kwari na Linux - a wannan halin da ake ciki ENXIO dole ne a dawo.)

EROFS

wayname yana nufin fayil ne a kan fayilolin fayilolin karantawa kawai kuma ana buƙatar samun damar shiga.

ETXTBSY

wayname yana nufin siffar da za a iya aiwatar da shi wanda a halin yanzu ake kashewa kuma rubuta adireshi ya nema.

EFAULT

wayname maki a waje da adireshin adireshinku na dama.

ELOOP

Yawancin alaƙa na alaƙa na alaƙa sun kasance sun hadu a cikin hanyar da aka tsara, ko kuma O_NOFOLLOW aka ƙayyade amma wayname ya kasance hanyar haɗi.

ENOSPC

sunan sunan dole ne a halicci amma na'urar da ke dauke da sunan ba shi da ɗaki ga sabuwar fayil.

ENOMEM

Babu ƙwaƙwalwar ajiyar ƙwaƙwalwar ajiya.

GABA

Shirin riga yana da iyakar adadin fayiloli bude.

SANTA

An ƙayyade yawan adadin fayilolin da aka bude akan tsarin.

Bayyana ga

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Sannun O_NOFOLLOW da O_DIRECTORY sune Linux- musamman. Ɗaya yana iya ƙayyade ma'anar _GNU_SOURCE don samun ma'anar su.

Ƙuntatawa

Akwai matsala masu yawa a cikin yarjejeniyar NFS mai mahimmanci, ta shafi wasu O_SYNC da O_NDELAY .

POSIX tana bayar da bambance-bambancen daban-daban na I / O aiki tare, daidai da flags O_SYNC , O_DSYNC da O_RSYNC . A halin yanzu (2.1.130) waɗannan duka suna cikin Linux.