Sužinokite Linux Command Open

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.