Lærðu Linux Command Open

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.