Anotacija
#include << A HREF = "file: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "file: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "file: /usr/include/fcntl.h"> 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 režimas );apibūdinimas
Atvirojo () sistemos skambučio linux komanda yra naudojama paversti pavardę į failo deskriptorių (mažą, neigiamą sveikąjį skaičių, skirtą naudoti vėlesniame įvesties / išvesties, kaip skaitymo , rašymo ir kt.). Kai skambutis sėkmingas, failo deskriptorius grąžino wil yra mažiausias failų deskriptorius, kuris šiuo metu nėra atidarytas procesui. Šis skambutis sukuria naują atvirą failą, kuris nėra bendrinamas su jokiu kitu procesu. (Tačiau bendri atvirieji failai gali kilti per sistemos skambutį (2).) Naujas failų deskriptorius yra atidarytas per exec funkcijas (žr. Fcntl (2)). Failo nuskaitymas nustatomas į failo pradžią.
Parametrų vėliavėlės yra viena iš O_RDONLY , O_WRONLY arba O_RDWR, kuri reikalauja atidaryti failą tik skaitymui, rašyti ar skaityti / rašyti atitinkamai bitwise arba "d" su nuline arba daugiau iš šių:
O_CREAT
Jei failas neegzistuoja, jis bus sukurtas. Failo savininkas (vartotojo ID) nustatomas kaip veiksmingas proceso naudotojo ID. Grupės nuosavybės (grupės ID) reikšmė priklauso nuo proceso efektyvios grupės ID arba iš tėvų aplanko grupės ID (priklausomai nuo failų sistemos tipo ir montavimo parinkčių bei pagrindinio katalogo režimo, žr., Pvz., Kalno parinktys bsdgroups ir sysvgroups iš ext2 failų sistemos, kaip aprašyta mount (8)).
O_EXCL
Kai naudojamas su O_CREAT , jei failas jau egzistuoja, tai yra klaida ir atviras nepavyks. Šiame kontekste egzistuoja simbolinė nuoroda, nepriklausomai nuo to, kur ji nurodo. O_EXCL yra sugadintas į NFS failų sistemas , o programose, kuriose naudojamas užrakinimo uždavinys, bus nurodyta lenktynių būklė. Atominių failų užblokavimo užraktas, naudojant užrakto failą, yra sukurti unikalų failą tame pačiame fs (pvz., Įtraukiant prieglobos pavadinimą ir pid), naudoti nuorodą (2), kad būtų sukurta nuoroda į užrakto failą. Jei nuoroda () grąžina 0, užraktas yra sėkmingas. Priešingu atveju naudokite stat (2) unikalaus failo, kad patikrintumėte, ar jo ryšio skaičius padidėjo iki 2, tokiu atveju užraktai taip pat sėkmingi.
O_NOCTTY
Jei pathname nurodo galinį įrenginį --- žr. Tty (4) --- jis netaps proceso valdymo terminalu, net jei procesas jo nėra.
O_TRUNC
Jei failas jau egzistuoja ir yra įprastas failas, o atvirasis režimas leidžia rašyti (ty yra O_RDWR arba O_WRONLY), jis bus sutrumpintas iki 0. Jei failas yra FIFO arba terminalo įrenginio failas, vėliava O_TRUNC ignoruojama. Priešingu atveju O_TRUNC poveikis yra nenustatytas. (Daugelyje Linux versijų jis bus ignoruojamas, kitose versijose bus grąžinta klaida.)
O_APPEND
Failas atidaromas pridėti režimu. Prieš kiekvieną įrašą failo rodyklė yra failo pabaigoje, tarsi lseek . O_APPEND gali sugadinti failus NFS failų sistemose, jei vienu metu failai vienu metu papildo daugiau nei vienu procesu. Taip yra todėl, kad NFS nepalaiko pridėti prie failo, taigi kliento branduolys turi jį imituoti, o tai negali būti padaryta be rasės būklės.
O_NONBLOCK arba O_NDELAY
Kai įmanoma, failas atidaromas neblokuojant. Nei atviras, nei bet koks vėlesnis failo deskriptoriaus veiksmas, kuris grąžinamas, paskatins procesą laukti. FIFO (vadinamųjų vamzdžių) tvarkymui taip pat žr. FIFO (4). Šis režimas neturi turėti įtakos failams, išskyrus FIFO.
O_SYNC
Failas atidarytas sinchroniniam I / O. Kiekvienas gautas failo deskriptoriaus įrašas blokuoja skambinimo procesą, kol duomenys fiziškai bus įrašyti į pagrindinę aparatinę įrangą. Žiūrėkite toliau pateiktus APRIBOJIMUS.
O_NOFOLLOW
Jei pathname yra simbolinė nuoroda, atviras nepavyksta. Tai yra "FreeBSD" plėtinys, kuris buvo įtrauktas į "Linux" versiją 2.1.126. Ankstesniuose pietų pavadinimuose esančių simbolių nuorodų vis tiek bus laikomasi. Antraštės iš glibc 2.0.100 ir vėliau apima šios vėliavos apibrėžimą; branduoliai prieš 2.1.126 ignoruos jį, jei bus naudojami .
O_DIRECTORY
Jei pathname nėra aplankas, atverkite failą. Ši vėliava yra specifinė "Linux" ir buvo įtraukta į branduolio versiją 2.1.126, kad būtų išvengta užblokuotų paslaugų problemų, jei opendir (3) yra iškviestas į FIFO ar juostinį įrenginį, tačiau neturėtų būti naudojamas už opendiro įdiegimo .
O_DIRECT
Pabandykite sumažinti įterpimo / išvesties cache poveikį iš šio failo ir iš jo. Apskritai tai sumažins našumą, tačiau tai naudinga ypatingomis situacijomis, pavyzdžiui, kai programos atlieka savo spartinimą. Failo I / O atliekama tiesiai į / iš vartotojo erdvės buferių. I / O yra sinchroninis, ty, baigus skaityti (2) arba rašyti (2) sistemos skambučius, garantuojama, kad duomenys bus perkelti. Perdavimo dydžiai ir naudotojo buferio išlyginimas ir failų išlyginimas turi būti daugialypis iš failų sistemos loginio bloko dydžio.
Ši vėliava palaikoma daugybėje Unix panašių sistemų; parama buvo pridėta Linux pagal branduolio versiją 2.4.10.
Semantiniu požiūriu panaši sąsaja blokiniams įrenginiams yra neapibūdinta (8).
O_ASYNC
Generuokite signalą (SIGIO pagal nutylėjimą, bet tai gali būti pakeista per fcntl (2)), kai šiame failo deskriptoriuje įvesta ar išvesta. Ši funkcija galima tik terminalams, pseudo terminams ir lizdams. Daugiau informacijos rasite fcntl (2).
O_LARGEFILE
32 bitų sistemose, palaikančiose didelių failų sistemą, leidžiama atidaryti failus, kurių dydžiai negali būti rodomi 31 bitų.
Kai kurios iš šių pasirinktinių vėliavų gali būti pakeistos naudojant fcntl po failo atidarymo.
Argumentų režimas nurodo leidimus naudoti, jei sukurtas naujas failas. Jis yra modifikuotas proceso umask įprastu būdu: sukurto failo leidimai (režimas & umask) . Atminkite, kad šis režimas taikomas tik būsimiems naujai sukurto failo prieigose; atviras pokalbis, kuris sukuria tik skaitomą failą, gali grąžinti skaitymo / įrašymo failo deskriptorių.
Režimui pateikiamos šios simbolinės konstantos:
S_IRWXU
00700 naudotojas (failo savininkas) perskaitė, rašo ir vykdo leidimą
S_IRUSR (S_IREAD)
00400 naudotojas turi skaityti leidimą
S_IWUSR (S_IWRITE)
00200 vartotojas turi rašymo leidimą
S_IXUSR (S_IEXEC)
00100 naudotojas turi vykdyti leidimą
S_IRWXG
00070 grupė skaityti, rašyti ir vykdyti leidimą
S_IRGRP
00040 grupė turi leidimą skaityti
S_IWGRP
00020 grupė turi rašymo leidimą
S_IXGRP
00010 grupė turi vykdyti leidimą
S_IRWXO
00007 kiti skaitė, rašo ir atlieka leidimą
S_IROTH
00004 kiti skaito leidimą
S_IWOTH
00002 kiti turi rašymo leidimą
S_IXOTH
00001 kiti vykdo leidimą
režimas turi būti nurodytas, kai O_CREAT yra vėliavose ir ignoruojamas kitaip.
Creat yra lygiaverčiai atidaryti su vėliavomis lygus O_CREAT | O_WRONLY | O_TRUNC .
GRĄŽINIMO VERTĖ
atviras ir creat grąžina naują failo deskriptorių, arba -1 jei įvyko klaida (tokiu atveju errno nustatytas tinkamai). Atkreipkite dėmesį, kad atviras gali atidaryti specialiuosius įrenginio failus, tačiau Creat negali jų kurti - vietoj to naudokite mknod (2).
Įjungus NFS failų sistemas, kuriose yra įjungtas UID atvaizdavimas, gali būti grąžintas failo deskriptorius, tačiau, pvz., Skaityti (2) užklausas atmestas EACCES . Taip yra todėl, kad klientas atlieka atidarymą patikrindamas leidimus, tačiau serveris atlieka UID atvaizdavimą, kai skaito ir rašo prašymus.
Jei failas yra naujai sukurtas, jo atime, ctime, mtime laukai nustatomi pagal dabartinį laiką, todėl yra tėvų aplanko ctime ir mtime laukai. Priešingu atveju, jei failas yra pakeistas dėl vėliavos O_TRUNC, jo laukai ctime ir mtime yra nustatyti pagal dabartinį laiką.
Klaidos
EEXIST
pathname jau egzistuoja ir naudojami O_CREAT ir O_EXCL .
EISDIR
pathname nurodo katalogą ir prieigos prašoma dalyvauti raštu (tai yra, O_WRONLY arba O_RDWR yra nustatytas).
EACCES
Prašoma prieiga prie failo neleidžiama arba vienas iš pavadinimų katalogų neleido atlikti paieškos (vykdymo) leidimo arba failo dar nebuvo, ir rašyti prieigą prie tėvų aplanko neleidžiama.
ENAMETOOLONG
pathname buvo per ilgas.
ENOENT
O_CREAT nėra nustatytas ir pavadinto failo neegzistuoja. Arba, katalogo sudedamoji dalis patyname neegzistuoja arba yra banginga simbolinė nuoroda.
ENOTDIR
Komponentas, naudojamas kaip aplankas pavadinime , iš tikrųjų nėra aplankas, arba O_DIRECTORY buvo nurodytas ir pathname nebuvo aplankas.
ENXIO
O_NONBLOCK | O_WRONLY yra nustatytas, pavadintas failas yra FIFO, o ne procesas, kurio failas yra atidarytas skaitymui. Arba failas yra specialus failo įrenginys ir nėra atitinkamo įrenginio.
ENODEV
pathname nurodo konkretaus įrenginio failą ir nėra atitinkamo įrenginio. (Tai Linux branduolio klaida - šioje situacijoje ENXIO turi būti grąžinta.)
EROFS
pathname nurodo failą tik skaitymui naudojamoje failų sistemoje ir prašoma rašymo prieigos.
ETXTBSY
pathname nurodo vykdomąjį vaizdą, kuris šiuo metu yra vykdomas ir prašoma rašyti.
EFAULT
Pavadinimų taškai už jūsų prieinamos adreso vietos.
ELOOP
Sprendžiant pietus, įvyko per daug simbolinių nuorodų, arba buvo nurodyta O_NOFOLLOW, tačiau patynumas buvo simbolinė nuoroda.
ENOSPC
Buvo sukurtas " pathname", bet įrenginys, kuriame yra " pathname ", neturi vietos naujam failui.
ENOMEM
Nepakanka branduolio atminties.
EMFILE
Procesas jau turi maksimalų failų skaičių.
ENFILE
Buvo pasiektas bendras sistemoje atidarytų failų skaičius.
Atitinka
SVR4, SVID, POSIX, X / OPEN, BSD 4.3. O_NOFOLLOW ir O_DIRECTORY vėliavėlės yra konkrečios " Linux" versijos . Galite apibrėžti _GNU_SOURCE makro, kad gautumėte jų apibrėžimus.
Apribojimai
Protokole, kuria grindžiamas NFS, yra daug klaidų , turinčių įtakos O_SYNC ir O_NDELAY .
POSIX pateikia tris skirtingus sinchronizuoto I / O variantus, atitinkančius vėliavėlių O_SYNC , O_DSYNC ir O_RSYNC . Šiuo metu (2.1.130) visi jie yra sinonimai pagal Linux.