Dysgu'r Archeb Linux Agored

Crynodeb

#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 (cynt * pathname , flags int ); int agored (enw cynt * llwybr , baneri int , modd mode_t ); creu creadigol (const char * pathname , mode_t mode );

Disgrifiad

Defnyddir y system agored () system linux i drosi enw'r llwybr yn ddisgrifydd ffeil (yn gyfan gwbl fach, negyddol i'w ddefnyddio yn I / O ddilynol fel gyda darllen , ysgrifennu , ac ati). Pan fydd yr alwad yn llwyddiannus, dychwelir y disgrifydd ffeil fydd y disgrifydd ffeil isaf sydd ddim ar agor ar hyn o bryd ar gyfer y broses. Mae'r alwad hwn yn creu ffeil agored newydd, heb ei rannu ag unrhyw broses arall. (Ond fe all ffeiliau a rennir agored godi trwy ffonio'r system fforc (2). Disgwylir i'r disgrifydd ffeil newydd barhau ar agor ar draws swyddogaethau exec (gweler fcntl (2)). Mae'r ffeil wedi'i wrthbwyso wedi'i osod i ddechrau'r ffeil.

Mae'r baneri paramedr yn un o O_RDONLY , O_WRONLY neu O_RDWR sy'n gofyn am agor y ffeil yn ddarllen yn unig, yn ysgrifennu'n unig neu'n darllen / ysgrifennu, yn y drefn honno, yn bitwise- neu 'd gyda sero neu fwy o'r canlynol:

O_CREAT

Os nad yw'r ffeil yn bodoli fe'i crëir. Mae perchennog (ID defnyddiwr) y ffeil wedi'i osod i ID defnyddiwr effeithiol y broses. Mae perchnogaeth grŵp (ID grŵp) wedi'i osod naill ai at ID grŵp effeithiol y broses neu i ID grŵp y cyfeiriadur rhiant (yn dibynnu ar y math o systemau ffeiliau a'r opsiynau mynydd, a dull y cyfeiriadur rhiant, gweler, ee, y mynydd opsiynau bsdgroups a sysvgroups o'r system ffeiliau ext2, fel y disgrifir yn mount (8)).

O_EXCL

Pan gaiff ei ddefnyddio gydag O_CREAT , os yw'r ffeil yn bodoli eisoes, mae'n gamgymeriad a bydd yr agoriad yn methu. Yn y cyd-destun hwn, mae cyswllt symbolaidd yn bodoli, waeth ble mae ei bwyntiau. Caiff O_EXCL ei thorri ar systemau ffeiliau NFS , bydd rhaglenni sy'n dibynnu arni ar gyfer perfformio tasgau cloi yn cynnwys cyflwr hil. Yr ateb ar gyfer perfformio cloi ffeiliau atomig gan ddefnyddio cloglen yw creu ffeil unigryw ar yr un fs (ee, gan gynnwys enw gwesteiwr a phid), defnyddiwch ddolen (2) i wneud dolen i'r clawr clo. Os yw link () yn dychwelyd 0, mae'r clo'n llwyddiannus. Fel arall, defnyddiwch stat (2) ar y ffeil unigryw i wirio a yw ei gyfrif cyswllt wedi cynyddu i 2, ac os felly mae'r clo hefyd yn llwyddiannus.

O_NOCTTY

Os yw enw'r llwybr yn cyfeirio at ddyfais derfynell --- gweler tty (4) --- ni fydd yn dod yn derfynell rheoli'r broses hyd yn oed os nad oes gan y broses un.

O_TRUNC

Os yw'r ffeil yn bodoli eisoes ac mae'n ffeil reolaidd ac mae'r dull agored yn caniatáu ysgrifennu (hy, O_RDWR neu O_WRONLY) bydd yn cael ei rwymo i hyd 0. Os yw'r ffeil yn ffeil ddyfais FIFO neu derfynell, anwybyddir y faner O_TRUNC. Fel arall, nid yw effaith O_TRUNC yn amhenodol. (Ar lawer o fersiynau Linux fe'i anwybyddir; ar fersiynau eraill, bydd yn dychwelyd gwall.)

O_APPEND

Mae'r ffeil yn cael ei hagor yn y modd argaeedig. Cyn pob ysgrifennwch , mae pwyntydd y ffeil wedi'i leoli ar ddiwedd y ffeil, fel pe bai gyda lseek . Efallai y bydd O_APPEND yn arwain at ffeiliau llygredig ar systemau ffeiliau NFS os yw mwy nag un broses yn atodi data i ffeil ar unwaith. Y rheswm am hyn yw nad yw NFS yn cefnogi arwyddo ffeil, felly mae'n rhaid i'r cnewyllyn cleient ei efelychu, na ellir ei wneud heb gyflwr hil.

O_NONBLOCK neu O_NDELAY

Pan fo'n bosib, agorir y ffeil mewn modd nad yw'n rhwystro. Ni fydd y gweithrediadau agored nac unrhyw waith dilynol ar y disgrifydd ffeil a ddychwelir yn peri i'r broses alw aros. Ar gyfer trin FIFOs (pibellau a enwir), gweler hefyd fifo (4). Nid oes angen i'r dull hwn gael unrhyw effaith ar ffeiliau heblaw am FIFOs.

O_SYNC

Mae'r ffeil yn agor ar gyfer I / O cydamserol. Bydd unrhyw ysgrifennu ar y disgrifydd ffeil sy'n arwain at hyn yn rhwystro'r broses alw nes bod y data wedi'i ysgrifennu'n ysgrifenedig i'r caledwedd sylfaenol. Gweler CYFYNGIADAU isod, fodd bynnag.

O_NOFOLLOW

Os yw enw'r llwybr yn gyswllt symbolaidd, yna mae'r agoriad yn methu. Estyniad FreeBSD yw hwn, a gafodd ei ychwanegu at Linux yn fersiwn 2.1.126. Bydd cysylltiadau symbolaidd mewn cydrannau cynharach o'r enw'r llwybr yn dal i gael eu dilyn. Mae'r penawdau o glibc 2.0.100 ac yn ddiweddarach yn cynnwys diffiniad o'r faner hon; bydd cnewyllyn cyn 2.1.126 yn ei anwybyddu os caiff ei ddefnyddio .

O_DIRECTORY

Os nad yw cyfeiriad y llwybr yn gyfeiriadur, yn achosi i'r methiant agor. Mae'r faner hon yn benodol i Linux, ac fe'ichwanegwyd yn fersiwn cnewyllyn 2.1.126, er mwyn osgoi problemau gwrthod y gwasanaeth os caiff opendir (3) ei alw ar ddyfais FIFO neu dâp, ond ni ddylid ei ddefnyddio y tu allan i weithredu'r opendir .

O_DIRECT

Ceisiwch leihau effeithiau cache yr I / O i ac o'r ffeil hon. Yn gyffredinol, bydd hyn yn diraddio perfformiad, ond mae'n ddefnyddiol mewn sefyllfaoedd arbennig, megis pan fydd ceisiadau'n gwneud eu caching eu hunain. Ffeil Mae I / O wedi'i wneud yn uniongyrchol i / o byffwyr gofod defnyddwyr. Mae'r I / O yn gydamserol, hy, ar ôl cwblhau'r system darllen (2) neu ysgrifennu (2), mae data wedi'i warantu wedi'i drosglwyddo. Rhaid i feintiau trosglwyddo, a chysoniad clustogi'r defnyddiwr a'r ffeil gael eu gwrthbwyso, fod yn lluosrifau o faint bloc rhesymegol y system ffeiliau.
Cefnogir y faner hon ar nifer o systemau tebyg i Unix; Ychwanegwyd cefnogaeth o dan Linux yn nhrefn cnewyllyn 2.4.10.
Disgrifir rhyngwyneb semantig debyg ar gyfer dyfeisiau bloc mewn amrwd (8).

O_ASYNC

Cynhyrchu signal (SIGIO yn ddiofyn, ond gellir newid hyn trwy fcntl (2)) pan fydd mewnbwn neu allbwn yn dod yn bosibl ar y disgrifydd ffeil hwn. Mae'r nodwedd hon ar gael yn unig ar gyfer terfynellau, ffugiau terfynol, a socedi. Gweler fcntl (2) am ragor o fanylion.

O_LARGEFILE

Ar systemau 32-bit sy'n cefnogi'r System Ffeiliau Mawr, caniatewch ffeiliau na ellir eu cynrychioli mewn 31 bits i'w hagor.

Gall rhai o'r baneri dewisol hyn gael eu newid gan ddefnyddio fcntl ar ôl i'r ffeil gael ei hagor.

Mae'r modd dadl yn pennu'r caniatâd i'w defnyddio rhag ofn bod ffeil newydd yn cael ei chreu. Fe'i haddasir gan umasg y broses yn y ffordd arferol: mae caniatâd y ffeil a grëwyd yn (modd a ~ umask) . Sylwch fod y dull hwn yn berthnasol yn unig i fynediad i'r ffeil sydd newydd ei greu; efallai y bydd y galwad agored sy'n creu ffeil ddarllen yn unig yn dychwelyd disgrifydd ffeil darllen / ysgrifennu.

Darperir y cysonion symbolaidd canlynol ar gyfer y modd :

S_IRWXU

Mae defnyddiwr 00700 (perchennog ffeiliau) wedi darllen, ysgrifennu a gweithredu caniatâd

S_IRUSR (S_IREAD)

Mae defnyddiwr 00400 wedi darllen caniatâd

S_IWUSR (S_IWRITE)

Mae gan ddefnyddiwr 00200 ganiatâd ysgrifenedig

S_IXUSR (S_IEXEC)

Mae defnyddiwr 00100 wedi gweithredu caniatâd

S_IRWXG

Mae grŵp 00070 wedi darllen, ysgrifennu a gweithredu caniatâd

S_IRGRP

Mae grŵp 00040 wedi darllen caniatâd

S_IWGRP

Mae gan grŵp 00020 ganiatâd ysgrifenedig

S_IXGRP

00010 grŵp wedi gweithredu caniatâd

S_IRWXO

Mae 00007 eraill wedi darllen, ysgrifennu a gweithredu caniatâd

S_IROTH

Mae 00004 eraill wedi darllen caniatâd

S_IWOTH

Mae gan 00002 eraill ganiatâd ysgrifenedig

S_IXTH

Mae 00001 eraill wedi cyflawni caniatâd

Rhaid nodi'r modd pan fydd O_CREAT yn y baneri , ac fe'i anwybyddir fel arall.

mae cread yn gyfwerth ag agor gyda baneri sy'n hafal i O_CREAT | O_WRONLY | O_TRUNC .

GWERTHU'R GWERTH

agor a chreu yn dychwelyd y disgrifydd ffeil newydd, neu -1 os digwydd gwall (yn yr achos hwnnw, mae errno wedi'i osod yn briodol). Sylwch y gall agor agor ffeiliau arbennig dyfais, ond nid yw'r cread yn gallu eu creu - defnyddiwch mknod (2) yn lle hynny.

O ran systemau ffeiliau NFS gyda galluog mapio UID, gall agor dychwelyd disgrifydd ffeil ond ee darllenir (2) o geisiadau gyda EACCES . Mae hyn oherwydd bod y cleient yn perfformio ar agor trwy wirio'r caniatadau, ond mae'r gweinydd yn perfformio mapio UID ar ôl darllen ac ysgrifennu ceisiadau.

Os yw'r ffeil wedi'i greu o'r newydd, mae ei feysydd atime, ctime, mtime wedi'u gosod ar yr adeg gyfredol, ac felly mae caeau ctime a mtime y cyfeiriadur rhiant. Fel arall, os yw'r ffeil wedi'i addasu oherwydd y faner O_TRUNC, mae ei gaeau ctime a mtime wedi'u gosod ar yr amser presennol.

Gwallau

EEXIST

enw'r llwybr eisoes yn bodoli a defnyddiwyd O_CREAT ac O_EXCL .

EISDIR

cyfeiria enw'r llwybr at gyfeiriadur a gosodir y fynedfa y gofynnir amdani yn ysgrifenedig (hynny yw, O_WRONLY neu O_RDWR ).

EACCES

Ni chaniateir mynediad i'r ffeil, neu ni chaniataodd un o'r cyfeirlyfrau yn y llwybr ganiatâd chwilio (gweithredu), neu nad oedd y ffeil yn bodoli eto ac na chaniateir mynediad at y cyfeiriadur rhiant.

ENAMETOOLONG

roedd enw'r llwybr yn rhy hir.

ENOENT

Nid yw O_CREAT wedi'i osod ac nid yw'r ffeil a enwir yn bodoli. Neu, nid yw cydran cyfeiriadur yn enw'r llwybr yn bodoli nac yn gyswllt symbolaidd sy'n taro.

ENOTDIR

Nid yw cydran a ddefnyddir fel cyfeiriadur yn enw'r llwybr , mewn gwirionedd, wedi'i nodi yn gyfeiriadur, neu O_DIRECTORY ac nid cyfeiriadydd oedd y llwybr .

ENXIO

O_NONBLOCK | Gosodir O_WRONLY, mae'r ffeil a enwir yn FIFO ac nid oes gan y broses y ffeil ar agor i'w ddarllen. Neu, mae'r ffeil yn ffeil arbennig dyfais ac nid oes dyfais gyfatebol yn bodoli.

ENODEV

mae enw'r llwybr yn cyfeirio at ffeil arbennig dyfais ac nid oes dyfais gyfatebol yn bodoli. (Mae hwn yn nam cnewyllyn Linux - yn y sefyllfa hon rhaid dychwelyd ENXIO.)

EROFS

mae enw'r llwybr yn cyfeirio at ffeil ar system ffeiliau ddarllen yn unig a gofynnwyd am fynediad ysgrifenedig.

ETXTBSY

mae enw'r llwybr yn cyfeirio at ddelwedd weithredadwy sy'n cael ei weithredu ar hyn o bryd a gofynnwyd am fynediad ysgrifenedig.

EFAULT

pwyntiau'r llwybr y tu allan i'ch lle cyfeiriad hygyrch.

ELOOP

Cafwyd gormod o gysylltiadau symbolaidd wrth ddatrys enw'r llwybr , neu nodwyd O_NOFOLLOW ond roedd y enw'r llwybr yn gyswllt symbolaidd.

ENOSPC

roedd enw'r llwybr yn cael ei greu ond nid oes gan y ddyfais sy'n cynnwys enw'r llwybr le ar gyfer y ffeil newydd.

ENOMEM

Roedd cof cnewyllyn annigonol ar gael.

EMFILE

Mae gan y broses eisoes nifer uchaf y ffeiliau ar agor.

ENFILE

Mae'r terfyn ar gyfanswm nifer y ffeiliau sy'n agored ar y system wedi'i gyrraedd.

Yn cydymffurfio â

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Mae'r baneri O_NOFOLLOW a O_DIRECTORY yn Linux -specific. Efallai y bydd yn rhaid i un ddiffinio'r macro _GNU_SOURCE i gael eu diffiniadau.

Cyfyngiadau

Mae yna lawer o anfodlonrwydd yn y protocol sy'n sail i NFS, gan effeithio ar eraill O_SYNC ac O_NDELAY .

Mae POSIX yn darparu tair gwahanol amrywiad o I / O cydamserol, sy'n cyfateb i'r baneri O_SYNC , O_DSYNC ac O_RSYNC . Ar hyn o bryd (2.1.130) mae'r rhain i gyd yn gyfystyr â Linux.