Funda i-Linux Command Open

Isiqendu

#qulude << A HREF = "ifayile: /usr/include/sys/types.h"> sys / types.h> # kuquka "A HREF =" ifayile: /usr/include/sys/stat.h>> sys / stathh> # kuquka "A HREF =" ifayile: /usr/include/fcntl.h "> fcntl.h> int evulekileyo (intrakthi yendlela , iiflegs ); evulekileyo ( intsimbi yendlela ) , iiflegi zangaphakathi, imodeli ye- mode_t ); int creat (i-const char * umendo , indlela yemodi_t );

Inkcazo

Umyalelo ovulekile () wenkqubo ye-call linux isetyenzisiweyo ukuguqula igama lomzila kwi-descriptor yefayili (encinci, engenanto engenziyo ekusebenziseni i-I / O elandelayo njengokufunda, ukubhala , njl.). Xa ifowuni iphumelele, i-descriptor yefayile ibuyele kwakhona ibe yinkcazelo yezantsi yefayile engabonwanga ngenkqubo. Olu fowuni ludala ifayile entsha evulekileyo, engabelwanga nayo nayiphi na inkqubo. (Kodwa ikwabelwana iifayile ezivulekileyo zingaphuma ngefowuni (2) umnxeba wenkqubo.) I-descriptor entsha yefayile isetyenziselwe ukuhlala ivulekile kwimisebenzi yokusebenza (jonga i- fcntl (2)). I-offset yefayile isetyenziswe ekuqaleni kwefayili.

Iifayile zepalitha enye ye- O_RDONLY , i- O_WRONLY okanye i- O_RDWR ecela ukuvula iifayile ezifundwayo kuphela, ukubhala kuphela-okanye ukufunda / ukubhala ngokulandelanayo, ngokukodwa okanye nge-zero okanye okunye oku kulandelayo:

O_CREAT

Ukuba ifayile ayikho iya kudala. Umnini (i-ID yomsebenzisi) yefayili isetyenziswe kwi-ID yomsebenzisi esebenzayo kwinkqubo. Ubunikazi beqela (i-ID ye-ID) isetyenzisiweyo kwi-ID yeqela elisebenzayo kwinkqubo okanye kwi-ID ye-ID yomrekhoda womzali (kuxhomekeke kwindlela yohlobo lweefayile kunye nokukhethwa kwendlela, kunye nemodi yomqondiso womzali, yabona, umz. iindlela ze- bsdgroups kunye ne- sysgroups yesistimu yefayile ye-ext2, njengoko ichazwe kwintaba (8)).

O_EXCL

Xa isetyenziswe nge- O_CREAT , ukuba ifayile sele ikhona iphutha kwaye ivulekile iya kuphumelela. Kulo mongo, isiqhelo esingokomqondiso sikhona, kungakhathaliseki ukuba iindawo zayo ziphi. I-O_EXCL iphulwe kwiinkqubo zefayile ze-NFS , iinkqubo ezithembele kuyo ukwenza imisebenzi yokuvala izakuquka imeko yomqhumo . Isisombululo sokwenza ifowuni yokukhiya i-atomic usebenzisa i-lockfile ukudala iifayile ezizodwa kwiifs ezifanayo (umz., Ukufaka igama lomninimzi kunye ne-pid), sebenzisa isiqhagamshelo (2) ukwenza umnxibelelwano kwifayile yokukhiya. Ukuba isixhumanisi () sibuyisa i-0, ilokhi iphumelele. Ngaphandle koko, sebenzisa imimiselo (2) kwifayile ekhethekileyo ukuba ukhangele ukuba ngaba inani lakhonkco liye landa ukuya kwe-2, kwimeko apho ikhekhi iphinde iphumelele.

O_NOCTTY

Ukuba igama libhekisela kwisixhobo esipheleleyo --- qaphela (4) --- ayiyi kuba yinkqubo yokulawula yenkqubo nokuba ngaba inqubo ayinayo.

O_TRUNC

Ukuba ifayile isele ikhona kwaye iifayile eziqhelekileyo kunye nemodi evulekile ivumela ukubhalwa (okt, i-O_RDWR okanye i-O_WRONLY) iya kuthathwa kwixesha elide 0. Ukuba ifayili ifayile yeFIFO okanye ifowuni yesiphelo, i-flag ye-O_TRUNC ayinakunyuswa. Ngaphandle koko, umphumo we-O_TRUNC awunacacisiwe. ( Kwiinguqu ezininzi ze-Linux ziya kuhoywa; kwezinye iinguqulelo, ziya kubuya impazamo.)

O_APPEND

Ifayile ivuliwe kwimodi ye-append. Ngaphambi kokuba ngamnye ubhale , i-pointer yefayili ifakwe ekupheleni kwefayili, ngokungathi i- lseek . I-OPAPEND ingakhokelela kwiifayile ezonakalisiweyo kwiifayile zefayile zeNFS ukuba inkqubo engaphezulu kweyodwa ifake idatha kwifayile ngexesha elilodwa. Oku kungenxa yokuba i-NFS ayixhasi ukufaka isicelo kwifayili, ngoko i-kernel yomthengi kufuneka ifane nayo, engenakuyenza ngaphandle kobuhlanga.

O_NONBLOCK okanye O_NDELAY

Xa kunokwenzeka, ifayile iyavulwa kwimodi engeyiyo yokukhusela. Akukho nto evulekileyo okanye nayiphi na imisebenzi esilandelayo kwi-descriptor yefayile ebuyiselwayo iya kwenza ukuba inkqubo yokubiza ilinde. Ukusingatha i-FIFOs (iipayipi ezibizwa ngokuba yigama), jonga kwakhona i- fifo (4). Le modi ayifuni ukuba nefuthe kwiifayile ngaphandle kweFIFOs.

O_SYNC

Ifayile ivulelwe i-synchronous I / O. Naliphina ibhala kwisichazi sefayile esiphumelayo siya kuvimba inkqubo yokubiza kuze kube yilapho idatha ibhaliwe ngokomzimba kwi-hardware engaphantsi. Jonga iINTLOKO ezingezantsi, nangona kunjalo.

O_NOFOLLOW

Ukuba igama lekhonkco liqhagamshelweyo, oko kuvuleka. Ukongezwa kwe-FreeBSD, eyongezwa kwiLuxux kwinguqulelo 2.1.126. Izixhumanisi ezibonakalisiweyo kwiinkalo zangaphambili zegama liza kulandelwa. Izihloko ezivela kwi-glibc 2.0.100 kwaye kamva ziquka inkcazo yale flegi; iilena phambi kwe-2.1.126 ziya kuhoywa xa zisetyenziswa .

ODIRECTORY

Ukuba igama lisoloko lisikhombisi , bangela ukuba uvuleke. Le flegi i-Linux-specific, kwaye yongezwa kwinguqulo ye-kernel 2.1.126, ukukhusela iingxaki zokunqaba ukukhonza ukuba i- opendir (3) ibizwa kwi-FIFO okanye ifowuni, kodwa akufanele isetyenziswe ngaphandle kokuphunyezwa kwe- opendir .

O_DIRECT

Zama ukunciphisa imiphumo ye-cache ye-I / O ukuya nakweli fayile. Ngokuqhelekileyo oku kuya kutshabalalisa ukusebenza, kodwa kuncedo kwiimeko ezizodwa, njengokuba xa izicelo zizenza i-caching yazo. Ifayile i- O / O yenziwe ngqo / ukusuka kubasebenzisi bokungena kwendawo. I-O idibeneyo, oko kukuthi, ekugqityiweni kokufunda (2) okanye ukubhala (2) umnxeba wenkqubo, idatha iqinisekisiwe ukuba idluliselwe. Ukutshintshwa kobuninzi, kunye nokulungelelaniswa kwebhokisi lomsebenzisi kunye nokukhutshwa kwefayili kufuneka zonke ziphindwe ngokuphindaphindiweyo kobuninzi bebhloko benkqubo yefayile.
Le flegi ifakwe inkxaso kwiinkqubo ezininzi ze-Unix; Inkxaso yongezwa phantsi kwe-Linux kwi-kernel version 2.4.10.
Isixhobo esibonakalayo esifanayo neso sixhobo sebhloko sichazwa kwi- raw (8).

O_ASYNC

Ukuvelisa isignali (SIGIO ngokungagqibekanga, kodwa oku kungatshintshwa nge fcntl (2)) xa igalelo okanye isiphumo sinokukwazi kule fayile yeenkcukacha. Le nto ifumaneka kuphela kwii-terminals, i-terminals-terminals, kunye neziseko. Bona i- fcntl (2) ngeenkcukacha ezingaphezulu.

O_LARGEFILE

Kwiinkqubo ezingama-32 zenkxaso ezixhasa i-Large Files System, vumela iifayile ezinobungakanani obungenako ukumelwa kwi-bits ezingama-31 ukuba zivule.

Ezinye zeeflegi ezikhethiweyo zingatshintshwa usebenzisa i- fcntl emva kokuba ifayile ivuliwe.

Imodi yokuphikisa ichaza iimvume zokusetyenziswa xa kwenzeka ifayile entsha. Uguqulwa yindlela yokusebenzisa umaski ngendlela eqhelekileyo: iimvume zefayile ediziweyo (imodeli & ~ umask) . Qaphela ukuba le meko isebenza kuphela ekufikeleleni okuzayo kwefayili esanda kudalwa; Ifowuni evulekile eyenza iifayile ezifundwayo kuphela inokubuyisela i-descriptor ifayile yokufunda / ibhali.

Ezi zihlandlo zilandelayo zibonakaliswa kwimodi :

S_IRWXU

Umsebenzisi we-00700 (umnikazi wefayili) ufunde, abhale kwaye ayenze imvume

S_IRUSR (S_IREAD)

Umsebenzisi we-00400 ufunde imvume

S_IWUSR (S_IWRITE)

Umsebenzisi we-00200 ubhale imvume

S_IXUSR (S_IEXEC)

Umsebenzisi we-00100 uqhuba imvume

S_IRWXG

00070 iqela lifunde, libhale kwaye liphumeze imvume

S_IRGRP

I-00040 iqela lifunde imvume

S_IWGRP

I-00020 iqela libhale imvume

S_IXGRP

00010 iqela liqhuba imvume

S_IRWXO

00007 abanye baye bafunda, babhala baze baphumeze imvume

S_IROTH

00004 abanye bafunde imvume

S_IYE

00002 abanye babhala imvume

S_IXOTH

00001 abanye baqhuba imvume

Imodi kufuneka icaciswe xa i- O_CREAT ifakwe kwiiflegi , kwaye inganyanzelwanga ngenye indlela.

ukudala kufana nokuvula ngeeflegi ezilingana no- O_CREAT | O_WRONLY | O_TRUNC .

HLAWULWA NGOKUBALULEKILEYO

uvule kwaye udale ukubuya i-descriptor entsha yefayili, okanye -1 xa kukho iphutha (kwimeko apho, i- errno isetyenziswe ngokufanelekileyo). Qaphela ukuba ivulekile inokuvula iifayile ezikhethekileyo kwifayile, kodwa ukudala ayikwazi ukuyidala - sebenzisa mknod (2) endaweni yoko.

Kwiinkqubo zefayile ze-NFS ezineemephu ze-UID ezivuliwe , zivulekileyo zingabuyisa i-descriptor yefayile kodwa umzekelo, ukufunda (2) izicelo ziphikisiwe nge- EACCES . Oku kungenxa yokuba umthengi uvula ngokujonga iimvume, kodwa iimephu ze-UID zenziwa ngumncedisi emva kokufundwa nokubhala izicelo.

Ukuba ifayile isanda kudalwa, i-atime, i-ctime, i-mtime isetyenziswe kwixesha langoku, kwaye kunjalo ke i-ctime kunye neenkomfa zomncedisi womzali. Ngaphandle koko, ukuba ifayile iguqulwa ngenxa yefayile ye-O_TRUNC, i-timetime yayo kunye ne-mtime field zibekwe kwixesha langoku.

I mpazamo

EEXIST

Inkqubo sele ikhona kwaye i- O_CREAT ne- O_EXCL zisetyenzisiwe.

EISDIR

Inkqubo ibhekisela kwisikhokelo kunye nokufikelela okuceliwe kubandakanye ukubhala (oko kukuthi, O_WRONLY okanye i- O_RDWR isetyenziswe).

EACCES

Ufikelelo oluceliwe kwifayile aluvumelekanga, okanye enye yeenkcukacha kwigama lingazange livumele ukukhangela (ukwenza) imvume, okanye ifayile ayikhoyo kwaye ubhale ukufikelela kumkhombandlela womzali akuvumelekanga.

ENYE

Umendo wawude kakhulu.

BENZA

O_CREAT ayisetyenzisiweyo kunye nefayili egama lingekho. Okanye, inxalenye yecandelo lenkcazo ayikho okanye ikhonkco elingumqondiso.

ENOTDIR

Iqumrhu elisetyenziswe njenge-directory kwi- pathname ayikho, eqinisweni, i-directory, okanye i- O_DIRECTORY icacisiwe kwaye igama lomzila alilona ulawulo.

ENXIO

O_NONBLOCK | U-O_WRONLY usethe, ifayile ebizwa ngokuba yiFIFO kwaye akukho nqubo ifayile ivulekile yokufunda. Okanye, ifayili yifayile ekhethekileyo ifayile kwaye akukho fowuni ehambelanayo ikhoyo.

ENODEV

Inkqubo ibhekisela kwifayile ekhethekileyo kwaye akukho fowuni ehambelanayo ikhona. (Le yi-Linux kernel bug - kule imeko ENXIO kufuneka ibuyiselwe.)

EROFS

Inkqubo ibhekisela kwifayili kwisistimu yefayile efundwayo kuphela kwaye ubhale ukufikelela.

ETXTBSY

Inkqubo ibhekisela kumfanekiso osebenzayo okwenziwa ngoku kwaye ubhala ukufikelela.

EFAULT

Inkcazo yamanqaku ngaphandle kwendawo yokufumana idilesi yakho.

ELOOP

Unxibelelwano oluninzi lweengqamaniso eziye zadibana nazo ekuxazululeni igama lomnxeba , okanye i- O_NOFOLLOW icacisiwe kodwa igama lomzila laliqhagamshelweyo .

ENOSPC

Inkqubo yayiza kudalwa kodwa isixhobo esinegama lomzila asinayo indawo yefayili entsha.

KUNYE

Imemori yekernel enganeleyo ikhoyo.

EMFILE

Inkqubo sele ifumane inani eliphezulu leefayile ezivulekileyo.

KUNYE

Umda kwinani elipheleleyo leefayile ezivulekileyo kwinkqubo sele ifinyelelwe.

Ukuvumelana

SVr4, SVID, POSIX, X / VULE, BSD 4.3 I- O_NOFOLLOW kunye ne- ODIRECTORY iifowuni zi- Linux- ezicacileyo. Omnye unokufuneka achaze i- _GNU_SOURCE macro ukuze afumane iinkcazo zabo.

Zi thintelo

Kukho ukungonakali ezininzi kwiprotocol ephantsi kwe-NFS, echaphazela phakathi kwezinye i- O_SYNC kunye ne- O_NDELAY .

I-POSIX inikezela izinto ezahlukeneyo ezahlukeneyo ze-I / O ezichanekileyo, ezihambelana namaflegi O_SYNC , O_DSYNC kunye ne- O_RSYNC . Okwangoku (2.1.130) zizo zonke ezifanayo phantsi kweLinux.