Yfirlit
#include << HREF = "skrá: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "skrá: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "skrá: /usr/include/fcntl.h"> fcntl.h> int opna (const char * slóð , int flags ); int opinn (const char * pathname , int fánar , ham mode ); int creat (const char * pathname , mode_t ham );Lýsing
Open () kerfishringing Linux skipunin er notuð til að umbreyta slóðarnúmer í skráarlýsingu (lítill, ekki neikvæð heiltala til notkunar í síðari I / O eins og með lestri , skrifun osfrv.). Þegar símtalið tekst vel, þá verður skráarlýsingin sem skilað er að vera lægsti skráarlýsingin sem ekki er opinn fyrir ferlið. Þetta símtal skapar nýja opna skrá, ekki deilt með öðru ferli. (En samnýttir opnar skrár geta komið upp með gafflinum (2) kerfisímtali.) Nýja skjalaskýringin er stillt á að vera opin yfir exec-virka (sjá fcntl (2)). Skráasambandið er stillt í upphaf skráarinnar.
Breytuflagarnir eru ein af O_RDONLY , O_WRONLY eða O_RDWR sem óska eftir að opna skráarleigðina , skrifa eingöngu eða lesa / skrifa, hver um sig, bitwise- eða 'd með núll eða fleiri af eftirfarandi:
O_CREAT
Ef skráin er ekki til, verður það búin til. Eigandinn (notendanafn) skráarinnar er stillt á skilvirka notendanafn vinnunnar. Hópur eignarhald (hóp-auðkenni) er stillt annaðhvort í skilvirkt hóp-auðkenni ferilsins eða í hóps-auðkenni foreldrisskrárinnar (fer eftir tegundar skráarkerfis og fjallstillingar og háttur foreldrisskráarinnar, sjá td fjallið valkostir bsdgroups og sysvgroups ext2 skráakerfisins, eins og lýst er í fjalli (8)).
O_EXCL
Þegar það er notað með O_CREAT , ef skráin er þegar til staðar er villa og opinn mun mistakast. Í þessu sambandi er táknræn hlekkur til, óháð því hvar hún bendir til. O_EXCL er brotið á NFS skráarkerfi , forrit sem treysta á það til að framkvæma læsingarverkefni mun innihalda keppnisskilyrði. Lausnin til að framkvæma lotukerfislás með því að nota lockfile er að búa til einstaka skrá á sama fs (td innlimun hýsingarheiti og pid), notaðu tengil (2) til að tengja linsuna. Ef hlekkur () skilar 0, er læsingin tekin vel. Annars skaltu nota stat (2) á einstaka skrá til að ganga úr skugga um hvort tengslatölur hans hafi aukist í 2, en þá er læsingin einnig árangursrík.
O_NOCTTY
Ef slóðin vísar til flugstöðvarbúnaðar --- sjá tty (4) --- það mun ekki verða stjórnstöðin í ferlinu jafnvel þó að ferlið sé ekki með einn.
O_TRUNC
Ef skráin er þegar til staðar og er regluleg skrá og opinn háttur gerir það kleift að skrifa (þ.e. er O_RDWR eða O_WRONLY) verður það stytt í lengd 0. Ef skráin er FIFO eða endabúnaður skrá, er O_TRUNC flaggan hunsuð. Annars er áhrif O_TRUNC ótilgreint. (Á mörgum Linux útgáfum verður hunsað, í öðrum útgáfum mun það koma aftur upp villa.)
O_APPEND
Skráin er opnuð í viðbótarstillingu. Fyrir hverja skrifa er skráarpunkturinn staðsettur í lok skráarinnar, eins og með lseek . O_APPEND getur leitt til skemmdra skráa á NFS skráarkerfum ef fleiri en eitt ferli bætir gögnum við skrá í einu. Þetta er vegna þess að NFS styður ekki við að bæta við skrá, þannig að viðskiptavinurinn kjarna þarf að líkja eftir því, sem ekki er hægt að gera án keppnisástands.
O_NONBLOCK eða O_NDELAY
Þegar mögulegt er, þá er skráin opnuð í ótengdum ham. Hvorki opinn né nokkrar aðgerðir á skráarlýsingu sem er skilað mun leiða til þess að hringingarferlið bíðist. Fyrir meðhöndlun FIFOs (heitir pípur), sjá einnig fifo (4). Þessi stilling hefur engin áhrif á aðrar skrár en FIFOs.
O_SYNC
Skráin er opnuð fyrir samstillt I / O. Allir skrifa s á skráarlýsingu sem fylgir því mun loka símtalinu þar til gögnin hafa verið skrifuð líkamlega við undirliggjandi vélbúnað. Sjá þó takmarkanir hér að neðan.
O_NOFOLLOW
Ef pathname er táknræn hlekkur, þá opnar ekki. Þetta er FreeBSD eftirnafn, sem var bætt við Linux í útgáfu 2.1.126. Táknfræðilegir tenglar í fyrri hlutum slóðanna verða enn fylgt. Fyrirsagnirnar frá glibc 2.0.100 og síðar innihalda skilgreiningu á þessari fána; kjarna fyrir 2.1.126 mun hunsa það ef það er notað .
O_DIRECTORY
Ef slóðin er ekki skrá, veldu það að opna til að mistakast. Þessi fána er Linux-sérstakur og var bætt í kjarnaútgáfu 2.1.126 til að koma í veg fyrir afneitun á þjónustu ef opendir (3) er kallaður á FIFO eða borði tæki en ætti ekki að nota utan framkvæmd opendir .
O_DIRECT
Reyndu að draga úr skyndiminniáhrifum I / O til og frá þessari skrá. Almennt mun þetta draga úr afköstum, en það er gagnlegt í sérstökum aðstæðum, svo sem þegar umsóknir gera eigin flýtiminni þeirra. Skrá I / O er gert beint til / frá notanda rúmtegundum. The I / O er samstilltur, þ.e. þegar lokið er að lesa (2) eða skrifa (2) kerfis símtalið er tryggt að gögn hafi verið flutt. Flutningsstærðir og aðlögun notenda biðminni og skráoffsetning verða allir að vera margfeldi af rökréttum blokkarstærð skráarkerfisins.
Þessi fána er studd á fjölda Unix-eins kerfi; stuðningur var bætt við undir Linux í kjarnaútgáfu 2.4.10.
A semantically svipuð tengi fyrir blokk tæki er lýst í hrár (8).
O_ASYNC
Búðu til merki (SIGIO sjálfgefið, en þetta er hægt að breyta með fcntl (2)) þegar inntak eða framleiðsla verður mögulegt á þessari skráarlýsingu. Þessi eiginleiki er aðeins í boði fyrir skautanna, gervitungl og fals. Sjá fcntl (2) fyrir frekari upplýsingar.
O_LARGEFILE
Á 32-bita kerfi sem styðja Stór Skrá Kerfi, leyfa skrár sem ekki er hægt að tákna stærðir í 31 bita til að opna.
Sumir af þessum valfrjálsu fánar geta verið breytt með því að nota fcntl eftir að skráin hefur verið opnuð.
Rökstillingin tilgreinir heimildir til notkunar ef ný skrá er búin til. Það er breytt með ummerki ferilsins á venjulegum hátt: heimildir skráarsniðsins eru (ham & umask) . Athugaðu að þessi stilling aðeins gildir um framtíðaraðgang nýstofnaða skráarinnar; opið símtal sem býr til lesendanlegt skrá getur vel skilað lesa / skrifa skráarlýsingu.
Eftirfarandi táknrænir styrkir eru búnar til fyrir ham :
S_IRWXU
00700 notandi (skrá eigandi) hefur lesið, skrifað og framkvæmt leyfi
S_IRUSR (S_IREAD)
00400 notandi hefur lesið heimild
S_IWUSR (S_IWRITE)
00200 notandi hefur skriflegt leyfi
S_IXUSR (S_IEXEC)
00100 notandi hefur framkvæmt leyfi
S_IRWXG
00070 hópur hefur lesið, skrifað og framkvæmt leyfi
S_IRGRP
00040 hópur hefur lesið leyfi
S_IWGRP
00020 hópur hefur skriflegt leyfi
S_IXGRP
00010 hópur hefur framkvæmt leyfi
S_IRWXO
00007 aðrir hafa lesið, skrifað og framkvæmt leyfi
S_IROTH
00004 aðrir hafa lesið leyfi
S_IWOTH
00002 aðrir hafa skriflegt leyfi
S_IXOTH
00001 aðrir hafa framkvæmt leyfi
ham verður að vera tilgreindur þegar O_CREAT er í fánar og er hunsuð á annan hátt.
creat jafngildir opinn með fánar jafngildir O_CREAT | O_WRONLY | O_TRUNC .
RETURN VALUE
opna og skrifa skilaðu nýju skjalaskýringuna, eða -1 ef villu átti sér stað (í því tilviki er errno stillt á viðeigandi hátt). Athugaðu að opnast getur opnað sérstaka skrár fyrir tæki, en sköpun getur ekki búið til þau - notaðu mknod (2) í staðinn.
Á NFS skráarkerfi með UID kortlagning virkt, opið getur skilað skráarlýsingu en td lesið (2) beiðnir eru hafnað með EACCES . Þetta er vegna þess að viðskiptavinurinn vinnur opinn með því að athuga heimildir, en UID kortlagning er gerð af þjóninum við lesa og skrifa beiðnir.
Ef skráin er nýlega búin eru atime-, ctime-, mtime-reitirnar stilltir á núverandi tíma og svo eru ctime og mtime sviðum móðurbókarinnar. Annars, ef skráin er breytt vegna O_TRUNC fánarinnar, er ctime og mtime reitin stillt á núverandi tíma.
Villur
EEXIST
Slóðin er þegar til og O_CREAT og O_EXCL voru notuð.
EISDIR
pathname vísar til möppu og aðgangur að beiðni um að ræða skrifað (það er O_WRONLY eða O_RDWR er stillt).
EACCES
Beðið um aðgang að skránni er ekki leyfilegt, eða eitt af möppunum í slóðinni leyfði ekki leyfi (framkvæma) leyfi, eða skráin var ekki ennþá og skrifað aðgangur að foreldrisskránni er ekki leyfileg.
ENAMETOOLONG
Slóðin var of langur.
ENOENT
O_CREAT er ekki stillt og hét skrá er ekki til. Eða er skráarsnið í slóðinni ekki til staðar eða er dangling táknræn hlekkur.
ENOTDIR
Hluti sem er notaður sem skrá í slóð er ekki í raun skrá eða O_DIRECTORY var tilgreind og slóðin var ekki skrá.
ENXIO
O_NONBLOCK | O_WRONLY er stillt, hét skrá er FIFO og engin ferli hefur skrána opin fyrir lestur. Eða er skráin sérstakur skrá í tækinu og ekkert samsvarandi tæki er til staðar.
ENODEV
pathname vísar til sérstaks skráar tækis og ekkert samsvarandi tæki er til staðar. (Þetta er Linux kjarna bug - í þessu ástandi verður ENXIO skilað.)
EROFS
Slóðin vísar til skráar á eingöngu skráarkerfi og skrifað var að skrifaaðgangi.
ETXTBSY
pathname vísar til executable mynd sem er nú framkvæmd og skrifað aðgangur var beðið um.
EFAULT
slóðarnúmer utan aðgengilegu vistfangssvæðis þíns.
ELOOP
Of mörg táknræn tengsl komu fram við að leysa slóð , eða O_NOFOLLOW var tilgreint en slóðin var táknræn hlekkur.
ENOSPC
slóðin ætti að vera búin til en tækið sem inniheldur slóðin hefur ekki pláss fyrir nýja skrá.
ENOMEM
Ófullnægjandi kjarna minni var í boði.
EMFILE
Ferlið hefur nú þegar hámarksfjölda skráa opnar.
ENFILE
Takmarkanir á heildarfjölda skráa sem opnar eru á kerfinu er náð.
Í samræmi við
SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Fliparnir O_NOFOLLOW og O_DIRECTORY eru Linux- sérstakar. Þú gætir þurft að skilgreina _GNU_SOURCE þjóðveginn til að fá skilgreiningar þeirra.
Takmarkanir
Það eru margar infelicities í siðareglum undirliggjandi NFS, sem hafa áhrif á meðal annars O_SYNC og O_NDELAY .
POSIX kveður á um þrjár mismunandi afbrigði af samstilltu I / O, sem svarar til fána O_SYNC , O_DSYNC og O_RSYNC . Eins og er (2.1.130) eru þetta öll samheiti undir Linux.