Foghlaim Oscailte Ordú Linux

Achoimre

#include << A HREF = "comhad: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "file: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "comhad: /usr/include/fcntl.h"> fcntl.h> int open (const char * pathname , int brat ); int oscailte (const char * pathname , int brat , modh mode_t ); int cruthaithe (const char * pathname, mode mode );

Cur síos

Úsáidtear an t-ordú linux ( córas ) oscailte ( córas ) chun ainm cosanta a thiontú ina thuairisceoir comhad (slánuimhir neamhdhiúltach beag le húsáid in I / O ina dhiaidh sin mar a léamh , a scríobh , etc.). Nuair a bheidh an glao rathúil, is é an tuairisceoir comhad a d'fhill an tuairisceoir comhaid is ísle nach bhfuil oscailte don phróiseas faoi láthair. Cruthaíonn an glaoch comhad nua oscailte, gan a roinnt le próiseas ar bith eile. (Ach d'fhéadfadh comhaid oscailte roinnte a bheith ann trí ghlaoch an chórais fork (2).) Tá an tuairiscí nua comhad leagtha amach go fóill ar fheidhmeanna exec (féach fcntl (2)). Tá an comhad a fhritháireamh leagtha síos ag tús an chomhaid.

Tá na bratacha paraiméadar ar cheann de O_RDONLY , O_WRONLYO_RDWR a iarrann an comhad a oscailt le léamh amháin, scríobh-amháin nó léamh / scríobh, faoi seach, giotán- 'd le nialas nó níos mó díobh seo a leanas:

O_CREAT

Mura bhfuil an comhad ann, cruthaítear é. Socraítear an t-úinéir (ID úsáideora) an chomhaid ar an ID úsáideora éifeachtach ar an bpróiseas. Socraítear úinéireacht an ghrúpa (ID ghrúpa) ar ghrúpa ID éifeachtach an phróisis nó d'ainm ghrúpa an eolaire tuismitheoir (ag brath ar chineál an chórais chomhaid agus na roghanna mount, agus modh an eolaire tuismitheora, féach, eg, an mount roghanna bsdgroups agus sysvgroups den chóras comhaid ext2, mar a thuairiscítear i mount (8)).

O_EXCL

Nuair a úsáidtear sé le O_CREAT , má tá an comhad ann cheana féin, is earráid é agus mainneoidh an oscailt . Sa chomhthéacs seo, tá nasc siombalach ann, is cuma cén áit a mbaineann sé. Tá O_EXCL briste ar chórais comhaid NFS , beidh coinníoll cine ag cláir a bhfuil sé ag brath air chun tascanna glasála a dhéanamh. Is é an réiteach chun glasáil comhaid adamhach a dhéanamh ag baint úsáide as glaschomhad ná comhad uathúil a chruthú ar an bhfscríbhinn céanna (m.sh., lena n-áirítear ainm óstach agus pid), nasc a úsáid (2) chun nasc a dhéanamh leis an ghlaschló. Má thagann nasc () ar ais 0, rachaidh an glas ar rath. Seachas sin, bain úsáid as stat (2) ar an gcomhad uathúil chun a sheiceáil an bhfuil a líon naisc ag méadú go dtí 2, agus sa chás sin rathúil an glas.

O_NOCTTY

Má thagraíonn an t- ainm cosanta le gléas críochfoirt --- féach tty (4) --- ní bheidh sé mar chríochfort rialaithe an phróisis fiú mura bhfuil ceann amháin ag an bpróiseas.

O_TRUNC

Má tá an comhad ann cheana agus is comhad rialta é agus is féidir leis an mód oscailte scríobh (is é sin, O_RDWR nó O_WRONLY) beidh sé teasctha go dtí fad 0. Más comhad FIFO nó gléas críochfoirt é an comhad, déantar neamhaird ar bhratach O_TRUNC. Seachas sin, tá éifeacht O_TRUNC neamhshonraithe. (Ar go leor leaganacha Linux ní dhéanfar neamhaird air; ar leaganacha eile, cuirfidh sé earráid ar ais.)

O_APPEND

Osclaítear an comhad sa mód aguisín. Sula ngach scríobh , tá pointeoir an chomhaid suite ag deireadh an chomhaid, amhail is dá mba le lseek . D' fhéadfadh O_APPEND comhaid truaillithe a bheith ann ar chórais comhad NFS má chuireann níos mó ná próiseas amháin sonraí ar fáil chuig comhad ag an am céanna. Tá sé seo toisc nach dtacaíonn NFS le comhad a chur ar fáil, mar sin ní mór don eithne cliant a insamhail, nach féidir a dhéanamh gan riocht cine.

O_NONBLOCKO_NDELAY

Nuair is féidir é, osclaítear an comhad i mód neamh-blocála. Ní chuirfidh na hoibríochtaí oscailte ná aon oibríochtaí ina dhiaidh sin ar an tuairisceoir comhad a chuirtear ar ais ina chúis leis an bpróiseas glaonna fanacht. Chun láimhseáil FIFO (píopaí ainmnithe), féach freisin fifo (4). Ní gá go mbeadh aon éifeacht ag an mód seo ar chomhaid seachas FIFOanna.

O_SYNC

Osclaítear an comhad le haghaidh I / O sioncrónna. Cuirfidh aon scríobh ar an tuairisceoir comhad a eascraíonn as an bpróiseas glaonna go dtí go mbeidh na sonraí scríofa go fisiciúil ar na crua-earraí bunúsacha. Féach SRIANNA thíos, áfach.

O LEANAÍ

Más nasc siombalach é an cosán, ansin mainneoidh an oscailt. Is síneadh FreeBSD é seo, a cuireadh le Linux i leagan 2.1.126. Leanfar le naisc shimpliúla i gcomhpháirteanna níos luaithe den chonainm. Cuimsíonn na ceannteidil ó glibc 2.0.100 agus níos déanaí sainmhíniú ar an bratach seo; ní dhéanfaidh kernels roimh 2.1.126 neamhaird air má úsáidtear é .

O_DIRECTORY

Mura bhfuil comhadainm mar chomhadlann, cuir an teip ar oscailt. Tá an bratach seo ar Linux-sonrach, agus cuireadh leis an leagan 2.1.126 eiseamláir, chun fadhbanna diúltú seirbhíse a sheachaint má iarrtar ar opendir (3) ar fheiste FIFO nó téip, ach níor cheart é a úsáid lasmuigh de chur i bhfeidhm an opendir .

O_DIRECT

Déan iarracht éifeachtaí taisce an I / O a íoslaghdú go dtí agus ón gcomhad seo. Go ginearálta, díghrádóidh sé feidhmíocht, ach tá sé úsáideach i gcásanna speisialta, mar shampla nuair a dhéanann na hiarratais a gcuid caching féin. Comhad Déantar I / O go díreach chuig / ó mhaoláin spáis úsáideora. Tá an I / O sioncrónach, is é sin, nuair a bheidh an glao córas á léamh (2) nó scríobh (2) críochnaithe, déantar sonraí a ráthaíodh go n-aistríodh iad. Ní mór go mbeadh méideanna aistrithe, agus ailíniú maolán úsáideora agus comhaid a fhritháireamh, iolraithe ar mhéid bloc loighciúil an chórais comhaid.
Tugtar tacaíocht don bhratach seo ar roinnt córais cosúil le Unix; Cuireadh tacaíocht faoi Linux i gcroílár leagan 2.4.10.
Déantar cur síos ar chomhéadan leathláithchéiseach do ghléasanna bloc in amh (8).

O_ASYNC

Comhartha a ghiniúint (SIGIO de réir réamhshocraithe, ach is féidir é seo a athrú trí fcntl (2)) nuair is féidir ionchur nó aschur a dhéanamh ar an tuairisceoir seo. Níl an gné seo ar fáil ach amháin le haghaidh críochfoirt, pseudo-críochfoirt, agus soicéid. Féach fcntl (2) le haghaidh tuilleadh sonraí.

O_LARGEFILE

Ar chórais 32-giotán a thacaíonn leis an gCóras Comhaid Móra, lig comhaid nach féidir a mhéid a léiriú i 31 giotán atá le hoscailt.

Is féidir cuid de na bratacha roghnacha seo a athrú ag baint úsáide as fcntl tar éis don chomhad a oscailt.

Sonraíonn an modh argóint na ceadanna le húsáid i gcás go gcruthófar comhad nua. Déantar é a mhodhnú ag umask an phróisis sa ghnáthbhealach: is iad ceadanna an chomhaid chruthaithe (modh & ~ umask) . Tabhair faoi deara nach mbaineann an modh seo ach le rochtainí an chomhaid nua-chruthaithe amach anseo; féadfaidh an glao ar oscailt a chruthaíonn comhad léite amháin tuairisceán comhad a léamh / a scríobh.

Cuirtear na sraitheanna siombalacha seo a leanas ar fáil do mhodh :

S_IRWXU

Tá úsáideoir 00700 (úinéir an chomhaid) cead a léamh, a scríobh agus a fhorghníomhú

S_IRUSR (S_IREAD)

Tá cead léite ag úsáideoir 00400

S_IWUSR (S_IWRITE)

Tá cead scríofa ag úsáideoir 00200

S_IXUSR (S_IEXEC)

Tá úsáideoir 00100 cead a fhorghníomhú

S_IRWXG

Tá grúpa 00070 tar éis cead a léamh, a scríobh agus a fhorghníomhú

S_IRGRP

Tá cead léite ag grúpa 00040

S_IWGRP

Tá cead scríofa ag grúpa 00020

S_IXGRP

Tá grúpa 00010 cead a fhorghníomhú

S_IRWXO

00007 tá daoine eile tar éis cead a léamh, a scríobh agus a fhorghníomhú

S_IROTH

Tá cead léithe ag daoine eile 00004

S_IWOTH

Tá cead scríofa ag 00002 eile

S_IXTH

00001 Tá cead ag daoine eile a fhorghníomhú

Ní mór an modh a shonrú nuair a bhíonn O_CREAT sna bratacha , agus déantar neamhaird a dhéanamh air ar shlí eile.

is ionann an creat agus an bratach a bheith cothrom le O_CREAT | O_WRONLY | O_TRUNC .

FUILIMH LUACH

tuairisceoir nua an chomhaid a aisghairm agus a chruthú , nó má tharla earráid (sa chás sin, socraítear errno go cuí). Tabhair faoi deara gur féidir oscailte comhaid speisialta gléas a oscailt, ach ní féidir iad a chruthú - úsáid mknod (2) ina ionad sin.

Ar chórais comhaid NFS le cumas mapála UID, féadfaidh sé tuairisceoir comhad a fhilleadh ar ais ach m.sh. diúltaítear le hiarratais ar léamh (2) le EACCES . Tá sé seo toisc go n-oibríonn an cliant oscailte trí na ceadanna a sheiceáil, ach déanann an freastalaí mapáil UID ar iarratais a léamh agus a scríobh.

Má tá an comhad nua-chruthaithe, tá a réimsí atime, ctime, mtime leagtha síos don am atá ann faoi láthair, agus mar sin tá na réimsí ctime agus mtime den eolaire tuismitheoir. Seachas sin, má dhéantar an comhad a mhodhnú mar gheall ar bhratach O_TRUNC, tá a réimsí ctime agus mtime leagtha síos don am atá ann faoi láthair.

Earráidí

EEXIST

luíainm ann cheana agus baineadh úsáid as O_CREAT agus O_EXCL .

EISDIR

Tagraíonn an luíainm eolaire agus cuirtear an rochtain a d'iarr scríbhneoireacht i gceist (is é sin, O_WRONLYO_RDWR ).

EACCES

Ní cheadaítear an rochtain a iarrtar ar an gcomhad, nó níor cheadaigh ceann de na heolairí ar an gcosainm cead cuardaigh (forghníomhú), nó ní raibh an comhad ann fós agus níl cead ag scríobh rochtain ar an eolaire tuismitheoir.

ENAMETOOLONG

bhí an t- ainm luatha ró-fhada.

ENOENT

Níl O_CREAT leagtha síos agus níl an comhad ainmnithe ann. Nó, níl comhad eolaire sa luíainm ann nó is nasc siombalach atá i mbaol ann.

ENOTDIR

dhéantar comhad a úsáideadh mar chomhadlann sa ainm cosanta , go deimhin, go raibh eolaire, nó O_DIRECTORY sonraithe, agus ní comhadlann an t- ainm cosán .

ENXIO

O_NONBLOCK | Socraítear O_WRONLY, is FIFO an comhad ainmnithe agus níl an próiseas ar oscailt le haghaidh léitheoireachta. Nó, is comhad speisialta gléas é an comhad agus níl aon fheiste comhfhreagrach ann.

ENODEV

Tagraíonn an luíainm comhad speisialta gléas agus níl aon fheiste comhfhreagrach ann. (Is éard atá ann le fabhtcheangail Linux - sa chás seo ní mór ENXIO a thabhairt ar ais.)

EROFS

Tagraíonn an t- ainmainm comhad ar chóras comhaid léite amháin agus iarradh ar rochtain a scríobh.

ETXTBSY

Tagraíonn an luíainm d'íomhá inrite atá á fheidhmiú faoi láthair agus d'iarr rochtain ar scríobh.

EFAULT

pointí cosáin taobh amuigh de do spás seoladh inrochtana.

ELOOP

Rinneadh iomarca naisc siombalach le linn réitigh a luadh , nó bhí O_NOFOLLOW sonraithe ach gur nasc siombalach é an t-ainm.

ENOSPC

níorbh fhéidir an t-ainmneacha a chruthú ach níl aon seomra ann leis an gclós ina bhfuil an comhad nua.

ENOMEM

Ní raibh cuimhne neamhleor ann ar fáil.

FÉIDIR

Tá an líon uasta comhaid ar oscailt cheana féin.

FREAGRA

Tá an teorainn ar líon iomlán na gcomhad atá oscailte ar an gcóras bainte amach.

Ag cloí leis

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Tá na bratacha O_NOFOLLOW agus O_DIRECTORY Linux -specific. D'fhéadfadh go mbeadh ort macra _GNU_SOURCE a shainmhíniú chun a gcuid sainmhínithe a fháil.

Srianta

Tá go leor míshásta sa phrótacal atá mar bhunús den NFS, a dhéanann difear do dhaoine eile O_SYNC agus O_NDELAY .

Soláthraíonn POSIX trí leagan éagsúil de I / O sioncronaithe, a fhreagraíonn do na bratacha O_SYNC , O_DSYNC agus O_RSYNC . Faoi láthair (2.1.130) tá gach ceann acu sin comhchiallaigh faoi Linux.