Sahihi
#include << A HREF = "faili: /usr/include/sys/types.h"> sys / types.h> # include << A HREF = "faili: /usr/include/sys/stat.h"> sys / stat.h> # include << A HREF = "faili: /usr/include/fcntl.h"> fcntl.h> int wazi (const char * pathname , int flags ); int wazi (const char * pathname , bendera int , mode_t mode ); int creat (const char * pathname , mode_t mode );Maelezo
Amri ya wazi () ya simu ya simu ya linux hutumiwa kubadili jina la njia kwenye faili descriptor (ndogo, isiyo na hasi integer kwa matumizi katika I / O inayofuata kama na kusoma , kuandika , nk). Wakati wito ukiwa na mafanikio, descriptor ya faili imerejezwa kuwa faili ya chini kabisa ya faili ambayo haifunguliwe kwa sasa kwa mchakato. Hangout hii inaunda faili mpya ya wazi, haijashirikiwa na mchakato mwingine wowote. (Lakini kushiriki files wazi inaweza kutokea kupitia simu (2) wito wa mfumo.) Faili mpya descriptor ni kuweka kubaki wazi katika kazi exec (angalia fcntl (2)). Kutoa faili ni kuweka mwanzo wa faili.
Bendera ya parameter ni moja ya O_RDONLY , O_WRONLY au O_RDWR ambayo inahitaji kufungua faili ya kusoma tu, kuandika pekee au kusoma / kuandika, kwa mtiririko huo, bitwise- au 'd kwa zero au zaidi ya yafuatayo:
O_CREAT
Ikiwa faili haipo haitakuwa imeundwa. Mmiliki (Kitambulisho cha mtumiaji) wa faili imewekwa kwenye Kitambulisho cha mtumiaji bora wa mchakato. Umiliki wa kikundi (Kitambulisho cha kikundi) kinawekwa kwenye Kitambulisho cha kikundi cha ufanisi cha mchakato au kwa Kitambulisho cha kikundi cha saraka ya wazazi (kulingana na aina ya mfumo wa faili na chaguzi za mlima, na hali ya saraka ya wazazi, angalia, kwa mfano, mlima chaguo bsdgroups na sysgroups ya mfumo wa faili wa ext2, kama ilivyoelezwa kwenye mlima (8)).
O_EXCL
Inapotumiwa na O_CREAT , ikiwa faili tayari ikopo ni kosa na wazi itashindwa. Katika muktadha huu, kiungo cha mfano kina, bila kujali ambapo inaelezea. O_EXCL imevunjwa kwenye mifumo ya faili ya NFS , programu ambazo hutegemea kwa kufanya kazi za kufungwa zitakuwa na hali ya mbio. Suluhisho la kufuatilia faili ya atomiki kwa kutumia lockfile ni kuunda faili ya kipekee kwenye fs sawa (kwa mfano, kuingiza jina la mwenyeji na pid), kutumia kiungo (2) ili kuunganisha kwenye kibofya. Ikiwa kiungo () kinarudi 0, lock ikofanikiwa. Vinginevyo, tumia stat (2) kwenye faili pekee ili uangalie ikiwa hesabu yake ya kiungo imeongezeka hadi 2, kwa hali hiyo lock pia imefanikiwa.
O_NOCTTY
Ikiwa jina la jina linamaanisha kifaa cha terminal --- tazama (4) --- haitakuwa terminal ya kudhibiti mchakato hata kama mchakato hauna moja.
O_TRUNC
Ikiwa faili tayari ipo na ni faili ya kawaida na hali ya wazi inaruhusu kuandika (yaani, ni O_RDWR au O_WRONLY) itatengwa kwa urefu wa 0. Kama faili ni FIFO au faili ya kifaa cha terminal, bendera ya O_TRUNC inachukuliwa. Vinginevyo, athari ya O_TRUNC haijulikani. (Kwa matoleo mengi ya Linux itapuuzwa; kwa matoleo mengine, itarudi kosa.)
O_APPEND
Faili inafunguliwa katika hali ya append. Kabla ya kila kuandika , pointer ya faili imewekwa mwishoni mwa faili, kama ilivyo kwa lseek . O_APPEND inaweza kusababisha faili zilizoharibiwa kwenye mifumo ya faili ya NFS ikiwa mchakato zaidi ya moja huongeza data kwenye faili mara moja. Hii ni kwa sababu NFS haiunga mkono kuingiza kwenye faili, hivyo kernel ya mteja inapaswa kuiiga, ambayo haiwezi kufanywa bila hali ya mbio.
O_NONBLOCK au O_NDELAY
Ikiwezekana, faili inafunguliwa kwa hali isiyozuia. Hakuna wazi au shughuli yoyote inayofuata kwenye faili ya faili ambayo inarudi itasababisha mchakato wa wito kusubiri. Kwa utunzaji wa FIFOs (zilizoitwa mabomba), angalia pia tano (4). Hali hii haipaswi kuwa na athari yoyote kwenye faili zingine isipokuwa FIFOs.
O_SYNC
Faili inafunguliwa kwa I / O ya synchronous. Yoyote ya kuandika kwenye faili ya faili inayosababisha itazuia mchakato wa wito mpaka data imeandikwa kimwili kwenye vifaa vya msingi. Angalia RESTRICTIONS chini, ingawa.
O_NOFOLLOW
Ikiwa jina la jina ni kiungo cha mfano, basi inafunguliwa wazi. Huu ni ugani wa FreeBSD, uliongezwa kwa Linux katika toleo 2.1.126. Viungo vyema katika vipengele vya awali vya jina la njia bado vitafuatwa. Vichwa kutoka glibc 2.0.100 na baadaye hujumuisha ufafanuzi wa bendera hii; kernels kabla ya 2.1.126 itapuuza ikiwa inatumiwa .
O_DIRECTORY
Ikiwa jina la jina sio saraka, fungua wazi kushindwa. Bendera hii ni maalum ya Linux, na imeongezwa katika toleo 2.1.126 ya kernel, ili kuepuka matatizo ya kukataa ya huduma ikiwa opendir (3) inaitwa kwenye FIFO au kifaa cha tepi, lakini haipaswi kutumiwa nje ya utekelezaji wa opendir .
O_DIRECT
Jaribu kupunguza madhara ya cache ya I / O na kutoka faili hii. Kwa ujumla hii itaharibu utendaji, lakini ni muhimu katika hali maalum, kama vile maombi yanafanya caching yao wenyewe. Faili I / O imefanywa moja kwa moja na / kutoka kwa buffers nafasi nafasi. I / O ni synchronous, yaani, wakati wa kukamilisha simu (2) au kuandika (2) mfumo, data imethibitishwa kuwa imehamishwa. Upeo wa uhamisho, na usawa wa buffer ya mtumiaji na faili ya kuzimwa lazima iwe kila aina ya ukubwa wa kuzuia mantiki ya mfumo wa faili.
Bendera hii inasaidiwa kwenye idadi ya mifumo ya Unix-kama; Msaada uliongezwa chini ya Linux katika toleo 2.4.10.
Kiambatanisho kinachofanana sawa na vifaa vya kuzuia kinaelezwa kwenye mbichi (8).
O_ASYNC
Kuzalisha ishara (SIGIO kwa default, lakini hii inaweza kubadilishwa kupitia fcntl (2)) wakati pembejeo au pato inavyowezekana kwenye maelezo ya faili hii. Kipengele hiki kinapatikana tu kwa vituo, vituo vya pseudo, na matako. Angalia fcntl (2) kwa maelezo zaidi.
O_LARGEFILE
Kwenye mifumo 32-bit inayounga mkono Mfumo wa Files Mkubwa, kuruhusu faili ambazo ukubwa hauwezi kusimamishwa katika bits 31 ili kufunguliwa.
Baadhi ya bendera hizi za hiari zinaweza kubadilishwa kwa kutumia fcntl baada ya faili kufunguliwa.
Hali ya hoja inafafanua ruhusa ya kutumia ikiwa kuna faili mpya. Imebadilishwa na umask wa mchakato kwa njia ya kawaida: ruhusa ya faili iliyoundwa ni (mode & ~ umask) . Kumbuka kuwa hali hii inatumika tu kwa upatikanaji wa baadaye wa faili iliyopangwa; wito wa wazi unaojenga faili tu ya kusoma inaweza kurudi maelezo ya kusoma / kuandika faili.
Vipengele vifuatavyo vinavyofuata hutolewa kwa mode :
S_IRWXU
Mtumiaji 00700 (mmiliki wa faili) amesoma, kuandika na kutekeleza idhini
S_IRUSR (S_IREAD)
Mtumiaji 00400 amesoma idhini
S_IWUSR (S_IWRITE)
Mtumiaji 00200 ana ruhusa ya kuandika
S_IXUSR (S_IEXEC)
Mtumiaji 00100 anafanya ruhusa
S_IRWXG
Kikundi cha 00070 kimesoma, kuandika na kutekeleza ruhusa
S_IRGRP
Kikundi cha 00040 kimesoma ruhusa
S_IWGRP
00020 kikundi kina ruhusa ya kuandika
S_IXGRP
00010 kundi linafanya ruhusa
S_IRWXO
Wengine 00007 wamesoma, kuandika na kutekeleza ruhusa
S_IROTH
00004 wengine wamesoma ruhusa
S_IWO
00002 wengine wameandika ruhusa
S_IXOTH
Wengine 00001 wamefanya ruhusa
mode lazima ifafanue wakati O_CREAT iko katika bendera , na inapuuzwa vinginevyo.
kuunda ni sawa kufungua na bendera sawa na O_CREAT | O_WRONLY | O_TRUNC .
PINDA KIFUNA
kufungua na kuunda kurudi maelezo ya faili mpya, au -1 ikiwa hitilafu ilitokea (katika hali hiyo, errno imewekwa ipasavyo). Kumbuka kuwa wazi inaweza kufungua faili maalum za kifaa, lakini kiumba hakiwezi kuunda - tumia mknod (2) badala yake.
Kwenye mifumo ya faili ya NFS na ramani ya UID imewezeshwa, kufungua inaweza kurudi maelezo ya faili lakini kwa mfano kusoma (2) maombi ni kukataliwa na EACCES . Hii ni kwa sababu mteja hufanya wazi kwa kuangalia ruhusa, lakini ramani ya UID inafanywa na seva juu ya maombi ya kusoma na kuandika.
Ikiwa faili imefungwa hivi karibuni, chumvi zake, ctime, mashamba ya mtime yanawekwa wakati wa sasa, na hivyo ndio orodha ya machapisho na mtime ya saraka ya mzazi. Vinginevyo, ikiwa faili imebadilishwa kwa sababu ya bendera ya O_TRUNC, msimu wake na mashamba ya mtime yamewekwa wakati wa sasa.
Hitilafu
EEXIST
Njia tayari iko na O_CREAT na O_EXCL zilitumiwa.
EISDIR
pathname inahusu saraka na ufikiaji unaohusika unaohusika kuandika (yaani, O_WRONLY au O_RDWR imewekwa).
EACCES
Ufikiaji uliotakiwa wa faili haukuruhusiwa, au mojawapo ya miongozo katika njia ya jina haikuruhusu kutafuta (kutekeleza) idhini, au faili haikuwepo bado na kuandika upatikanaji wa saraka ya wazazi hairuhusiwi.
ENAMETOOLONG
Njia ya muda ilikuwa ndefu sana.
JUMA
O_CREAT haijawekwa na faili iliyoitwa haipo. Au, kipengee cha saraka katika jina la cheti haipo au ni kiungo cha kuashiria cha kuvutia.
ENOTDIR
Kipengele kinachotumiwa kama saraka kwa njia ya jina si, kwa kweli, saraka, au O_DIRECTORY imetajwa na jina la njia sio saraka.
ENXIO
O_NONBLOCK | O_WRONLY imewekwa, faili iliyoitwa ni FIFO na hakuna mchakato una faili inayofunguliwa kwa kusoma. Au, faili ni faili maalum ya kifaa na hakuna kifaa sambamba kilichopo.
ENODEV
pathname inahusu faili maalum ya kifaa na hakuna kifaa sambamba kilichopo. (Hii ni mdudu wa kernel Linux - katika hali hii ENXIO lazima irudiwe.)
EROFS
pathname inahusu faili kwenye mfumo wa faili tu wa kusoma na kuandika upatikanaji uliombwa.
ETXTBSY
pathname inahusu picha inayoweza kutekelezwa ambayo kwa sasa imefanyika na kuandika upatikanaji iliombwa.
EFAULT
Njia ya njia ina nje ya nafasi yako ya kufikia anwani.
ELOOP
Viungo vingi vya mfano vilikutana na kutatua njia ya jina , au O_NOFOLLOW ilielezwa lakini jina la njia lilikuwa kiungo cha mfano.
ENOSPC
Njia ilipaswa kuundwa lakini kifaa kilicho na pathname haina nafasi ya faili mpya.
ENOMEM
Kumbukumbu ya kernel haitoshi ilikuwa inapatikana.
EMFILE
Mchakato tayari una idadi kubwa ya faili zilizo wazi.
FUNGWA
Kikomo juu ya idadi ya faili zilizofunguliwa kwenye mfumo imefikiwa.
Inafanana na
SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Bendera za O_NOFOLLOW na O_DIRECTORY ni Linux- maalum. Mtu anaweza kufafanua _GNU_SOURCE macro ili kupata ufafanuzi wao.
Vikwazo
Kuna uovu wengi katika itifaki ya msingi ya NFS, inayoathiri miongoni mwao O_SYNC na O_NDELAY .
POSIX hutoa vigezo tatu tofauti vya I / O iliyosawazishwa, sawa na bendera O_SYNC , O_DSYNC na O_RSYNC . Hivi sasa (2.1.130) haya yote ni sawa na chini ya Linux.