tiivistelmä
#sisältää
Kuvaus
avata() system call linux -komentoa käytetään muuntamaan polun nimi tiedoston kuvaajaksi (pieni, ei-negatiivinen kokonaisluku käytettäväksi seuraavassa I / O: ssa, kuten lukea, kirjoittaa, jne.). Kun puhelu onnistuu, tiedostojen kuvaaja palautetaan mahdollisimman pieneksi tiedostojen kuvaajaksi, joka ei ole tällä hetkellä avoinna prosessille. Tämä puhelu luo uuden avoimen tiedoston, jota ei ole jaettu mihinkään muuhun prosessiin. (Mutta jaetut avoimet tiedostot voivat syntyähaarukka(2) järjestelmäpuhelu.) Uusi tiedostonkuvaaja on asetettu pysymään avoimina kaikkiin exec-toimintoihin (ksfcntl(2)). Tiedostosiirtymä on asetettu tiedoston alkuun.
Parametri liput on yksiO_RDONLY, O_WRONLY taiO_RDWR jotka pyytävät tiedoston avaamista vain luku-, kirjoitus- tai lukea / kirjoittaa vastaavasti bit- tai d jossa on nolla tai useampi seuraavista:
O_CREAT
Jos tiedostoa ei ole olemassa, se luodaan. Tiedoston omistaja (käyttäjätunnus) on määritetty prosessin tehokkaaksi käyttäjätunnukseksi. Ryhmän omistus (ryhmä-ID) asetetaan joko prosessin tehokkaaseen ryhmätunnisteeseen tai vanhemman hakemiston ryhmätunnisteeseen (riippuen tiedostojärjestelmän tyypistä ja asennusvaihtoehdoista sekä vanhemman hakemiston moodista, katso esim. vaihtoehtoja bsdgroups ja sysvgroups ext2 - tiedostojärjestelmästä, kuten kuvataan kohdassaasentaa(8)).
O_EXCL
KäytettäessäO_CREAT, jos tiedosto on jo olemassa, se on virhe jaavata tulee epäonnistumaan. Tässä yhteydessä symbolinen yhteys on olemassa, riippumatta siitä, mihin se viittaa.O_EXCL on rikki NFS-tiedostojärjestelmissä, ohjelmat, jotka luottavat siihen lukitustöiden suorittamiseen, sisältävät kilpailutilan. Ratkaisu ydinlukituksen suorittamiseen lukitustiedoston avulla on luoda samalle tiedostolle samat fs: t (esim. Sisällyttämällä isäntänimeä ja pid), linkin käyttäminen linkin avulla (lockfile). Joslinkki() palauttaa 0, lukitus onnistuu. Muussa tapauksessa käytä stat(2) ainutkertaisesta tiedostosta sen tarkistamiseksi, onko sen linkkien määrä kasvanut 2: een, jolloin lukko onnistuu.
O_NOCTTY
Jos polku viittaa päätelaitteeseen --- katsotty(4) --- se ei tule prosessin ohjauspäätteeksi, vaikka prosessissa ei olisi sitä.
O_TRUNC
Jos tiedosto on jo olemassa ja se on tavallinen tiedosto ja avoin tila sallii kirjoittaa (eli O_RDWR tai O_WRONLY), se katkaistaan pituudeksi 0. Jos tiedosto on FIFO- tai päätelaitatiedosto, O_TRUNC-lippu jätetään huomiotta. Muutoin O_TRUNCin vaikutus ei ole täsmennetty. (Monissa Linux-versioissa sitä ei oteta huomioon, muissa versioissa se palauttaa virheen.)
O_APPEND
Tiedosto avataan lisäystilassa. Ennen jokaistakirjoittaa, tiedoston osoitin sijoitetaan tiedoston loppuun, ikään kuin joslseek. O_APPEND saattaa aiheuttaa vioittuneita tiedostoja NFS-tiedostojärjestelmissä, jos useampi kuin yksi prosessi liittää tietoja tiedostoon kerralla. Tämä johtuu siitä, että NFS ei tue tiedoston liittämistä, joten asiakkaan ytimen on simuloitava se, jota ei voida tehdä ilman kilpailuedellytyksiä.
O_NONBLOCK taiO_NDELAY
Aina kun mahdollista, tiedosto avautuu estotilassa. Eiavata eikä palautettavalle tiedoston kuvaajan myöhempää toimintaa aiheuta kutsuvan prosessin odottamaan. Katso myös FIFO: n (nimettyjen putkien) käsittelyä vartenFIFO(4). Tässä tilassa ei tarvitse olla vaikutusta muihin tiedostoihin kuin FIFO-tiedostoihin.
O_SYNC
Tiedosto avataan synkroniselle I / O: lle. Minkä tahansakirjoittaas tuloksena oleva tiedostojen kuvaaja estää kutsuprosessin, kunnes tiedot on kirjoitettu fyysisesti peruslaitteistoon. Katso kuitenkin alla olevat RAJOITUKSET.
O_NOFOLLOW
Jos polku on symbolinen linkki, sitten avoin epäonnistuu. Tämä on FreeBSD-laajennus, joka lisättiin Linuxiin versiossa 2.1.126. Jatkossa on edelleen symbolien linkkejä aiempien komentotiedostojen osissa. Glibc 2.0.100: n ja sen myöhemmissä otsakkeissa on tämän lipun määritelmä; ytimet ennen 2.1.126 sivuuttaa sen, jos sitä käytetään .
O_DIRECTORY
Jos polku ei ole hakemisto, aiheuttaa avoimen epäonnistumisen. Tämä lippu on Linux-spesifinen, ja se lisättiin ydinversioon 2.1.126, jotta vältetään palvelunestohäiriöt, josopendir(3) kutsutaan FIFO - tai nauha - laitteeksi, mutta sitä ei saa käyttää ohjelman toteutuksen ulkopuolellaopendir.
O_DIRECT
Yritä minimoida I / O-välimuistitoiminnot tähän tiedostoon. Yleensä tämä heikentää suorituskykyä, mutta se on hyödyllinen erityistilanteissa, kuten silloin, kun sovellukset tekevät omat välimuistinsa. Tiedoston I / O-tiedosto suoritetaan suoraan käyttäjän avaruustukiasemiin. I / O on synkroninen, ts lukea(2) taikirjoittaa(2) järjestelmäpuhelu, tiedot on taattu siirretty. Siirron koot ja käyttäjäpuskurin ja tiedostosiirron kohdistaminen on oltava tiedostojärjestelmän loogisen lohkokokoelman monikertoja.Tätä lippua tukee useilla Unix-kaltaisilla järjestelmillä. tuki lisättiin Linuxissa ytimen versioon 2.4.10.Kuviossa on kuvattu semanttisesti samanlainen liitäntä lohkolaitteilleraaka(8). O_ASYNC Luo signaali (SIGIO oletusarvoisesti, mutta sitä voidaan muuttaafcntl(2)), kun tulo tai ulostulo on mahdollinen tässä tiedoston kuvaajassa. Tämä ominaisuus on käytettävissä vain päätelaitteille, pseudoterminaaleille ja pistorasioille. nähdäfcntl(2) lisätietoja. O_LARGEFILE 32-bittisissä järjestelmissä, jotka tukevat suurta tiedostojärjestelmää, sallivat tiedostot, joiden kokoa ei voida edustaa 31 bittiä avattavissa. Joitakin näistä valinnaisista lipuista voidaan muuttaa käyttämälläfcntl kun tiedosto on avattu. Argumentti tila määrittää käyttöoikeudet, jos uusi tiedosto luodaan. Sitä muokataan prosessin avullaumask tavallisella tavalla: luodun tiedoston oikeudet ovat(tila & ~ umask). Huomaa, että tämä tila koskee vain äskettäin luotujen tiedostojen tulevia käyttöoikeuksia.avatapuhelu, joka luo vain luettavissa olevan tiedoston, saattaa palauttaa luku- / kirjoitustiedoston kuvaajan. Seuraavat symboliset vakiot on säädetty tila : S_IRWXU 00700 käyttäjä (tiedoston omistaja) on lukenut, kirjoitanut ja suorittanut luvan S_IRUSR (S_IREAD) 00400 käyttäjällä on lupaa S_IWUSR (S_IWRITE) 00200 käyttäjällä on kirjoitusoikeus S_IXUSR (S_IEXEC) 00100 käyttäjä on suorittanut luvan S_IRWXG 00070-ryhmä on lukenut, kirjoitanut ja suorittanut luvan S_IRGRP 00040 ryhmä on lukenut luvan S_IWGRP 00020-ryhmässä on kirjoitusoikeus S_IXGRP 00010-ryhmä on suorittanut luvan S_IRWXO 00007 toiset ovat lukeneet, kirjoittaneet ja suorittavat lupaa S_IROTH 00004 toiset ovat lukeneet luvan S_IWOTH 00002 muilla on kirjoitusoikeus S_IXOTH 00001 muuta ovat suorittaneet luvan tila on määritettävä, milloinO_CREAT on liput , eikä sitä muuten huomioida. creat vastaaavata kanssa liput yhtä kuinO_CREAT | O_WRONLY | O_TRUNC. PALAUTUSARVO avata jacreat palauta uusi tiedostojen kuvaaja tai -1, jos tapahtui virhe (tässä tapauksessa, errno on asetettu asianmukaisesti). Ota huomioon, ettäavata voi avata laitteeseen erikoistiedostot, muttacreat ei voi luoda niitä - käyttäämknod(2) sijaan. NFS-tiedostojärjestelmissä, joissa UID-kartoitus on otettu käyttöön,avata voi palauttaa tiedoston kuvaajan, esim. lukea(2) pyynnöt kielletäänEACCES. Tämä johtuu siitä, että asiakas suorittaaavata tarkistamalla käyttöoikeudet, mutta palvelin suorittaa UID-kartoituksen, kun lukee ja kirjoittaa pyynnöt. Jos tiedosto on äskettäin luotu, sen atime, ctime, mtime kentät asetetaan nykyiseen ajankohtaan, samoin ovat myös emolevyn ctime- ja mtime-kentät. Muussa tapauksessa, jos tiedostoa muutetaan O_TRUNC-flagin vuoksi, sen ctime- ja mtime-kentät asetetaan nykyiseen aikaan. EEXIST polku jo olemassa jaO_CREAT jaO_EXCL käytettiin. EISDIR polku viittaa hakemistoon ja pyydettyyn käyttöoikeuteen liittyen kirjallisesti (toisin sanoen,O_WRONLY taiO_RDWR on asetettu). EACCES Pyydetty pääsy tiedostoon ei ole sallittu tai jokin hakemistoista on polku ei sallinut haun (suorita) lupaa tai tiedostoa ei vielä ole ja kirjoitusoikeus vanhemman hakemistoon ei ole sallittua. ENAMETOOLONG polku oli liian pitkä. ENOENT O_CREAT ei ole asetettu eikä nimettyä tiedostoa ole olemassa. Tai, hakemistokomponentti vuonna polku ei ole olemassa tai on roikkuvan symbolinen linkki. ENOTDIR Hakemistoon käytettävä osa polku ei itse asiassa ole hakemisto, taiO_DIRECTORYja polku ei ollut hakemisto. ENXIO O_NONBLOCK | O_WRONLY on asetettu, nimetty tiedosto on FIFO eikä prosessi ole tiedostoa avoin lukemista varten. Tai tiedosto on laitekohtainen tiedosto eikä vastaavaa laitetta ole. ENODEV polku tarkoittaa laitekohtaista tiedostoa, eikä vastaavaa laitetta ole. (Tämä on Linux-ytimen virhe - tässä tilanteessa ENXIO on palautettava.) EROFS polku viittaa tiedostoon vain luku-tiedostojärjestelmässä ja kirjoitusoikeutta pyydettiin. ETXTBSY polku viittaa suoritettavaan kuvaan, jota parhaillaan suoritetaan ja kirjoitusoikeutta pyydetään. EFAULT polku pisteitä käytettävissä olevan osoitetilan ulkopuolella. ELoop Liian monta symbolista linkkiä kohdattiin ratkaisemisessa polku , taiO_NOFOLLOW oli määritelty, mutta polku oli symbolinen linkki. ENOSPC polku oli tarkoitus luoda, mutta laite sisältää polku ei ole tilaa uudelle tiedostolle. ENOMEM Kernelimuisti oli riittämätön. EMFILE Prosessissa on jo enimmäismäärä tiedostoja auki. ENFILE Järjestelmän avoimien tiedostojen kokonaismäärä on saavutettu. SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW jaO_DIRECTORY liput ovat Linux-spesifisiä. Yksi voi joutua määrittelemään_GNU_SOURCE makro saada määritelmät. NFS: n taustalla olevassa protokollassa on monia epäkohtia, jotka vaikuttavat muun muassaO_SYNC jaO_NDELAY. POSIX tarjoaa kolme eri tahdistettua I / O-versiota, jotka vastaavat lippujaO_SYNC , O_DSYNC ja O_RSYNC. Tällä hetkellä (2.1.130) nämä ovat kaikki yhtä Linuxissa. virheet
Täyttää
rajoitukset




