Povzetek
#include
Opis
Theodprto() sistemski klic linux ukaz se uporablja za pretvorbo poti v deskriptor datoteke (majhno, negativno celo število za uporabo v kasnejših V / I kot pri preberite, piši, itd.). Ko je klic uspešen, se deskriptor datoteke vrne z najnižjim deskriptorjem datoteke, ki trenutno ni odprt za postopek. Ta klic ustvari novo odprto datoteko, ki ni deljena z nobenim drugim procesom. (Toda deljene odprte datoteke se lahko pojavijo prekvilice(2) sistemski klic.) Novi deskriptor datoteke naj ostane odprt pri funkcijah exec (glejtefcntl(2)). Izravnava datoteke je nastavljena na začetek datoteke.
Parameter zastave je ena odO_RDONLY, O_WRONLY aliO_RDWR ki zahtevajo odpiranje datoteke samo za branje, samo za pisanje ali branje / pisanje, ali 'd z nič ali več od naslednjega:
O_CREAT
Če datoteka ne obstaja, bo ustvarjena. Lastnik (ID uporabnika) datoteke je nastavljen na dejansko uporabniško identifikacijo procesa. Lastništvo skupine (ID skupine) je nastavljeno bodisi na efektivno skupino ID procesa bodisi na ID skupine nadrejenega imenika (odvisno od vrste datotečnega sistema in možnosti namestitve ter načina nadrejenega imenika, glej npr. Namestitev opcije bsdgroups in sysvgroups datotečnega sistema ext2, kot je opisano vMount(8)).
O_EXCL
Pri uporabi zO_CREAT, če datoteka že obstaja, je napaka inodprto bo propadel. V tem kontekstu obstaja simbolična povezava, ne glede na to, kje se navezuje na.O_EXCL je prekinjen na datotečnih sistemih NFS, programi, ki se zanašajo na to, da opravljajo naloge zaklepanja, bodo vsebovali stanje dirke. Rešitev za zaklepanje atomske datoteke z zaklepanjem je ustvariti edinstveno datoteko na istem računalniku (npr. Vključiti ime gostitelja in pid), uporabiti povezavo (2), da povežete datoteko s ključavnico. Čepovezava () vrne 0, zaklepanje je uspešno. V nasprotnem primeru uporabite stat(2) na edinstveni datoteki, da preverite, ali se je število povezav povečalo na 2, v tem primeru je ključavnica tudi uspešna.
O_NOCTTY
Če ime poti se nanaša na terminalsko napravo --- glejtty(4) --- ne bo postal nadzorni terminal procesa, tudi če proces nima.
O_TRUNC
Če datoteka že obstaja in je redna datoteka in odprt način omogoča pisanje (to je, je O_RDWR ali O_WRONLY), bo skrajšan na dolžino 0. Če je datoteka datoteka FIFO ali končne naprave, se zastava O_TRUNC ne upošteva. V nasprotnem primeru je učinek O_TRUNC nespecificiran. (V mnogih različicah Linuxa bo prezrta, pri drugih različicah pa bo vrnila napako.)
O_APPEND
Datoteka se odpre v načinu dodajanja. Pred vsakimpiši, se kazalec datoteke nahaja na koncu datoteke, tako kot prilseek. O_APPEND lahko privede do poškodovanih datotek na datotečnih sistemih NFS, če več kot en proces hrani podatke v datoteko hkrati. To je zato, ker NFS ne podpira dodajanja datoteke, zato mora jedro odjemalca simulirati, kar pa ni mogoče storiti brez pogojev za tekmovanje.
O_NONBLOCK aliO_NDELAY
Če je mogoče, se datoteka odpre v načinu brez blokiranja. Nitiodprto niti nadaljnje operacije v datotečnem deskriptorju, ki se vrne, bo povzročilo postopek klicanja. Za ravnanje s FIFO (imenovanimi cevi) glejte tudififo(4). Ta način ne sme vplivati na datoteke, razen na FIFO.
O_SYNC
Datoteka je odprta za sinhrono V / I. Kajpišis na nastalem deskriptorju datoteke blokira postopek klicanja, dokler podatki niso fizično zapisani na osnovno strojno opremo. Ampak spodaj si oglejte spodnjo OZNAKE.
O_NOFOLLOW
Če ime poti je simbolična povezava, potem odprta ne uspe. To je razširitev FreeBSD, ki je bila dodana v Linux v različici 2.1.126. Še vedno bodo sledile simbolične povezave v prejšnjih komponentah poti. Glave iz glibc 2.0.100 in pozneje vsebujejo opredelitev te zastavice; jedra pred 2.1.126 se bo, če se uporablja, zanemarjala .
O_DIRECTORY
Če ime poti ni mapa, povzroči, da je odprt. Ta zastava je specifična za Linux in je bila dodana v različici jedra 2.1.126, da bi se izognili težavam z zanikanjem storitve, čeopendir(3) se kliče na FIFO ali tračno napravo, vendar se ne sme uporabljati zunaj izvajanjaopendir.
O_DIRECT
Poskusite zmanjšati predpomnilne učinke I / O v in iz te datoteke. Na splošno bo to poslabšalo učinkovitost, vendar je uporabno v posebnih okoliščinah, na primer, ko aplikacije izvajajo lastno predpomnjenje. File I / O se izvaja neposredno v / iz uporabniških puferov. V / I je sinhroniziran, tj. Ob zaključku preberite(2) alipiši(2) sistemski klic, podatki so zagotovljeni, da so bili preneseni. Velikosti prenosa in poravnava uporabniškega pufra in odmika datoteke morajo biti večkratnik velikosti logičnega bloka datotečnega sistema.Ta zastava je podprta na številnih sistemih, podobnih Unixu; Podpora je bila dodana v Linux v jedru različice 2.4.10.Semantično podoben vmesnik za blok naprave je opisan vsurov(8). O_ASYNC Ustvari signal (privzeto SIGIO, vendar ga lahko spremenite prekfcntl(2)), ko je v tem dokumentu opisan vnos ali izhod. Ta funkcija je na voljo samo za terminale, pseudo-terminale in vtičnice. Glejfcntl(2) za nadaljnje podrobnosti. O_LARGEFILE Na 32-bitnih sistemih, ki podpirajo sistem velikih datotek, omogočite datoteke, katerih velikosti ne morete biti predstavljene v 31 bitih, ki jih želite odpreti. Nekatere od teh opcijskih zastav je mogoče spremeniti z uporabofcntl po odprtju datoteke. Argument način določa dovoljenja za uporabo, če je ustvarjena nova datoteka. To je spremenjeno s procesomumask na običajen način: dovoljenja za ustvarjeno datoteko so(način & ~ umask). Upoštevajte, da se ta način uporablja samo za prihodnje dostope do novo ustvarjene datoteke; naodprtoklic, ki ustvari datoteko, ki je samo za branje, lahko vrne deskriptor za branje / pisanje datotek. Določene so naslednje simbolične konstante način : S_IRWXU Uporabnik 00700 (lastnik datoteke) je prebral, pisal in izvršil dovoljenje S_IRUSR (S_IREAD) Uporabnik 00400 ima dovoljenje za branje S_IWUSR (S_IWRITE) Uporabnik 00200 ima dovoljenje za pisanje S_IXUSR (S_IEXEC) Uporabnik 00100 ima dovoljenje za izvajanje S_IRWXG Skupina 00070 je brala, pisala in izvršila dovoljenje S_IRGRP Skupina 00040 ima dovoljenje za branje S_IWGRP Skupina 00020 ima dovoljenje za pisanje S_IXGRP Skupina 00010 ima dovoljenje za izvajanje S_IRWXO Drugi so prebrali, pisali in izvršili dovoljenje S_IROTH Drugi imajo dovoljenje za branje S_IWOTH Drugi imajo dovoljenje za pisanje S_IXOTH Drugi imajo izvršilno dovoljenje način je treba navesti, kdajO_CREAT je v zastave , in se ne upošteva drugače. stvar je enakovredenodprto z zastave enakoO_CREAT | O_WRONLY | O_TRUNC. POVRATNA VREDNOST odprto instvar vrne nov deskriptor datotek ali -1, če je prišlo do napake (v tem primeru, errno je ustrezno nastavljen). Upoštevajte, daodprto lahko odprejo posebne datoteke za naprave, vendarstvar jih ne morete ustvariti - uporabitemknod(2). Na datotečnih sistemih NFS z omogočeno mapiranjem UID-odprto lahko vrne deskriptor datoteke, npr. preberite(2) zahteve so zavrnjeneEACCES. To je zato, ker stranka opravljaodprto s preverjanjem dovoljenj, vendar pa UID kartiranje izvaja strežnik pri zahtevah za branje in pisanje. Če je datoteka na novo ustvarjena, so atomi, ctime, mtime polja nastavljeni na trenutni čas, kot tudi polja ctime in mtime nadrejenega imenika. V nasprotnem primeru, če je datoteka spremenjena zaradi oznake O_TRUNC, so polja ctime in mtime nastavljena na trenutni čas. EEXIST ime poti že obstaja inO_CREAT inO_EXCL so bili uporabljeni. EISDIR ime poti se nanaša na imenik in zahtevani dostop vključuje pisanje (to je,O_WRONLY aliO_RDWR je nastavljen). EACCES Zahtevani dostop do datoteke ni dovoljen ali eden od imenikov v ime poti ni dovolil dovoljenja za iskanje (izvršitev) ali pa še ni obstajala, dostop do nadrejenega imenika pa ni dovoljen. ENAMETOOLONG ime poti predolgo. ENOENT O_CREAT ni nastavljen in imenovana datoteka ne obstaja. Ali, komponenta imenika v ime poti ne obstaja ali pa je simbolična povezava. ENOTDIR Komponenta, ki se uporablja kot imenik v ime poti dejansko ni imenik, aliO_DIRECTORYje bil določen in ime poti ni bil imenovan. ENXIO O_NONBLOCK | O_WRONLY je nastavljen, imenovana datoteka je FIFO in noben postopek ni odprt za branje. Ali pa je datoteka posebna datoteka naprave in nobena ustrezna naprava ne obstaja. ENODEV ime poti se nanaša na posebno datoteko naprave in nobena ustrezna naprava ne obstaja. (To je bug jedra Linuxa - v tem primeru ENXIO je treba vrniti.) EROFS ime poti se nanaša na datoteko v datotečnem sistemu samo za branje in je zahtevan dostop za pisanje. ETXTBSY ime poti se nanaša na izvedljivo sliko, ki se trenutno izvaja in je bil zahtevan dostop za pisanje. EFAULT ime poti točke zunaj vašega dostopnega naslovnega prostora. ELOOP Pri reševanju je prišlo do preveč simboličnih povezav ime poti , aliO_NOFOLLOW je bil določen, vendar ime poti je bila simbolična povezava. ENOSPC ime poti je bil ustvarjen, vendar naprava vsebuje ime poti nima prostora za novo datoteko. ENOMEM Na voljo je bil premajhen pomnilnik jedra. EMFILE Proces ima že odprto največje število datotek. ENFILE Dosegla je omejitev skupnega števila datotek, odprtih v sistemu. SVr4, SVID, POSIX, X / ODPRTO, BSD 4.3O_NOFOLLOW inO_DIRECTORY zastave so specifične za Linux. Morda bo treba definirati_GNU_SOURCE makro, da bi dobili svoje definicije. V protokolu, na katerem temelji NFS, je veliko nejasnosti, ki med drugim vplivaO_SYNC inO_NDELAY. POSIX ponuja tri različice sinhroniziranih V / I, ki ustrezajo zastavamO_SYNC , O_DSYNC in O_RSYNC. Trenutno (2.1.130) so vsi sinonimni v Linuxu. Napake
Skladno s
Omejitve












