Rezime
# enkli << A HREF = "dosye: /usr/include/sys/types.h"> sys / types.h> # enkli << A HREF = "dosye: /usr/include/sys/stat.h"> sys / stat.h> # enkli << A HREF = "dosye: /usr/include/fcntl.h"> fcntl.h> int louvri (const char * chemen , int drapo ); int louvri (const char * chemen , int drapo , mòd mode_t ); Int kre (const char * chemen , mòd mòd );Deskripsyon
Louvri lòd ( yo rele ) sistèm linux yo itilize pou konvèti yon chemen nan yon descriptor dosye (yon ti non-negatif nonb negatif pou itilizasyon nan I / O ki vin apre kòm li , ekri , elatriye). Lè apèl la gen siksè, descriptoror dosye a tounen Wil dwe deskriptè a ki pi ba dosye ki pa kounye a louvri pou pwosesis la. Rele sa a kreye yon nouvo dosye ouvè, pa pataje ak nenpòt lòt pwosesis. (Men, pataje dosye ouvè ka leve via fouchèt la (2) rele sistèm.) Dosye a nouvo dosye yo mete yo rete louvri atravè fonksyon ekzekitif (al gade fnntl (2)). Fichye konpanse a mete nan konmansman an nan dosye a.
Drapo yo paramèt se youn nan O_RDONLY , O_WRONLY oswa O_RDWR ki demann ouvri dosye a li-sèlman, ekri-sèlman oswa li / ekri, respektivman, bitwise- oswa 'd ak zewo oswa plis nan sa ki annapre yo:
O_CREAT
Si dosye a pa egziste li pral kreye. Se mèt kay la (ID itilizatè) nan dosye a mete nan ID itilizatè a efikas nan pwosesis la. Gwoup la an komen (ID gwoup) mete swa nan ID gwoup la efikas nan pwosesis la oswa nan gwoup la ID nan anyè a paran (ki depann sou kalite filèsistèm ak opsyon mòn, ak mòd nan anyè paran an, gade, egzanp, mòn lan opsyon bsdgroups ak sysvgroups nan dosye a ext2, jan sa dekri nan mòn (8)).
O_EXCL
Lè yo itilize ak O_CREAT , si dosye a deja egziste li se yon erè epi ouvè a ap febli. Nan kontèks sa a, yon lyen senbolik egziste, kèlkeswa kote pwen li yo. O_EXCL kase sou sistèm dosye NFS , pwogram ki konte sou li pou fè travay bloke pral gen yon kondisyon ras. Solisyon pou fè bloke dosye atomik lè l sèvi avèk yon lockfile se kreye yon dosye inik sou fs yo menm (egzanp, enkòpore hostname ak PID), sèvi ak lyen (2) fè yon lyen nan lockfile la. Si lyen () retounen 0, fèmen a se siksè. Sinon, sèvi ak stat (2) sou dosye a inik yo tcheke si konte lyen li yo ogmante a 2, nan ka sa a lock la tou siksè.
O_NOCTTY
Si chimen refere a yon aparèy tèminal --- gade tty (4) --- li pa vin vin kontwole tèminal pwosesis la menm si pwosesis la pa gen yon sèl.
O_TRUNC
Si dosye a deja egziste epi li se yon dosye regilye ak mòd nan louvri pèmèt ekri (sa vle di, se O_RDWR oswa O_WRONLY) li pral tronkonik nan longè 0. Si dosye a se yon FIFO oswa dosye aparèy tèminal, drapo a O_TRUNC se inyore. Sinon, se efè O_TRUNC ki pa espesifye. (Sou vèsyon Linux anpil li pral inyore; sou vèsyon lòt, li pral retounen yon erè.)
O_APPEND
Se dosye a louvri nan mòd append. Anvan chak ekri , konsèy dosye a pozisyone nan fen dosye a, tankou si ak lseek . O_APPEND ka mennen nan dosye koripsyon sou sistèm dosye NFS si plis pase yon pwosesis rantre done nan yon dosye nan yon fwa. Sa a se paske NFS pa sipòte anvlòp nan yon dosye, kidonk Kernel a kliyan gen simulation li, ki pa ka fè san yo pa yon kondisyon ras.
O_NONBLOCK oswa O_NDELAY
Lè sa posib, dosye a louvri nan mòd ki pa bloke. Ni louvri a ni okenn operasyon ki vin apre sou descriptor dosye a ki retounen ap lakòz pwosesis la rele yo rete tann. Pou manyen FIFO yo (yo te rele tiyo), gade tou fifo (4). Sa a mòd bezwen pa gen okenn efè sou dosye lòt pase FIFOs.
O_SYNC
Se dosye a louvri pou synchronous I / O. Nenpòt ekri sou descriptor dosye a ap bloke pwosesis la rele jiskaske done yo te fizikman ekri nan pyès ki nan konpitè kache. Gade rezistans anba a, menm si.
O_NOFOLLOW
Si chimen se yon lyen senbolik, Lè sa a, louvri a echwe. Sa a se yon ekstansyon FreeBSD, ki te ajoute nan Linux nan vèsyon 2.1.126. Lyen senbolik nan konpozan pi bonè nan chemen an ap toujou swiv. Tèt yo soti nan glibc 2.0.100 epi pita gen ladan yon definisyon sa a drapo; nwayo anvan 2.1.126 pral inyore li si yo itilize .
O_DIRECTORY
Si chimen se pa yon anyè, lakòz ouvè a febli. Drapo sa a se Linux-espesifik, e li te ajoute nan vèsyon 2.1.126 Kernel, pou fè pou evite pwoblèm refi-of-sèvis si opendir (3) rele sou yon aparèy FIFO oswa kasèt, men yo pa dwe itilize deyò nan aplikasyon an nan opendir .
O_DIRECT
Eseye minimize efè kachèt nan I / O pou ale ak soti nan dosye sa a. An jeneral sa a pral degrade pèfòmans, men li se itil nan sitiyasyon espesyal, tankou lè aplikasyon pou fè caching pwòp yo. File I / O se fè dirèkteman nan / de tanpon espas itilizatè. I / O la se synchrone, sa vle di, nan ranpli li a (2) oswa ekri (2) rele sistèm, done yo garanti yo te transfere. Transfè gwosè, ak aliyman nan zòn de defansè itilizatè a ak ranpli konpozisyon yo dwe tout miltip nan gwosè a blòk lojik nan sistèm nan dosye.
Sa a se drapo sipòte sou yon kantite sistèm Unix-tankou; Sipò te ajoute anba Linux nan vèsyon 2.4 vèsyon pipiti de youn.
Yon koòdone semantikman ki sanble pou aparèy blòk yo dekri nan kri (8).
O_ASYNC
Jenere yon siyal (SIGIO pa default, men sa ka chanje via fcntl (2)) lè opinyon oswa pwodiksyon vin posib sou sa a descriptor dosye. Karakteristik sa a se sèlman ki disponib pou tèminal, pseudo-tèminal, ak sipò. Gade l '(2) pou plis detay.
O_LARGEFILE
Sou sistèm 32-ti jan ki sipòte sistèm nan gwo dosye, pèmèt dosye ki gen gwosè pa ka reprezante nan 31 Bits yo dwe louvri.
Gen kèk nan drapo si ou vle yo ka chanje lè l sèvi avèk fcntl apre dosye a te louvri.
Mòd nan agiman espesifye otorizasyon yo itilize nan ka yon nouvo dosye kreye. Li modifye pa umask pwosesis la nan fason ki nòmal: autorisations yo nan dosye a kreye yo se (mòd & ~ umask) . Remake byen ke mòd sa a sèlman aplike nan aksè nan lavni nan dosye a ki fèk kreye; apèl la louvri ki kreye yon dosye lekti sèlman ka byen retounen yon deskriptè dosye lekti / ekri.
Yo konstante konstan yo senbolik yo bay pou mòd :
S_IRWXU
00700 itilizatè (mèt kay dosye) li, ekri ak egzekite pèmisyon
S_IRUSR (S_IREAD)
00400 itilizatè a li pèmisyon
S_IWUSR (S_IWRITE)
00200 itilizatè te ekri pèmisyon
S_IXUSR (S_IEXEC)
00100 itilizatè te egzekite pèmisyon
S_IRWXG
00070 gwoup li, ekri ak egzekite pèmisyon
S_IRGRP
00040 gwoup te li pèmisyon
S_IWGRP
00020 gwoup gen pèmisyon ekri
S_IXGRP
00010 gwoup te egzekite pèmisyon
S_IRWXO
00007 lòt moun yo te li, ekri ak egzekite pèmisyon
S_IROTH
00004 lòt moun yo te li pèmisyon
S_IWOTH
00002 lòt moun gen ekri pèmisyon
S_IXOTH
00001 lòt moun yo te egzekite pèmisyon
mòd yo dwe espesifye lè O_CREAT se nan drapo yo , epi li inyore otreman.
Kreyòl se ekivalan a ouvè ak drapo egal a O_CREAT | O_WRONLY | O_TRUNC .
RETIRE valè
ouvè ak kreye retounen descriptor a dosye nouvo, oswa -1 si yon erè ki te fèt (nan ka sa a, errno se mete kòmsadwa). Remake byen ke louvri ka louvri aparèy espesyal dosye, men kreyòl pa ka kreye yo - sèvi ak mknod (2) olye.
Sou sistèm dosye NFS ak kat UID pèmèt, louvri ka retounen yon deskriptè dosye, men egzanp li (2) demann yo refize ak EACCES . Sa a se paske kliyan an ap fè louvri pa tcheke autorisations yo, men se kat ID fè pa sèvè a sou li ak ekri demann.
Si se dosye a ki fèk kreye, atime li yo, ctime, jaden mtime yo mete nan tan aktyèl la, e konsa se jaden yo ctime ak mtime nan anyè paran an. Sinon, si se dosye a modifye paske nan drapo O_TRUNC, jaden ctime li yo ak mtime yo mete nan tan aktyèl la.
Erè
EEXIST
chemen ki deja egziste ak O_CREAT ak O_EXCL yo te itilize.
EISDIR
chemen refere a yon anyè ak aksè a mande ki enplike ekri (ki se, O_WRONLY oswa O_RDWR mete).
EASE
Aksè nan mande a dosye a pa pèmèt, oswa youn nan repèrtwar yo nan chemen pa t 'pèmèt pèmisyon rechèch (egzekite), oswa dosye a pa t' egziste ankò epi yo ekri aksè nan anyè paran an pa pèmèt.
ENAMETOOLONG
chemen an te twò lontan.
ENOENT
O_CREAT pa mete ak dosye a te nonmen pa egziste. Oswa, yon eleman anyè nan chemen an pa egziste oswa se yon pendant senbolik lyen.
ENOTDIR
Yon eleman ki itilize kòm yon anyè nan chemen se pa, an reyalite, yon anyè, oswa O_DIRECTORY te espesifye ak chimen pa t 'yon anyè.
ENXIO
O_NONBLOCK | O_WRONLY se mete, dosye a te rele a se yon FIFO e pa gen okenn pwosesis ki gen dosye a ouvè pou lekti. Oswa, dosye a se yon dosye espesyal aparèy ak pa gen aparèy korespondan ki egziste.
ENODEV
chemen refere a yon aparèy espesyal dosye ak pa gen aparèy korespondan ki egziste. (Sa a se yon ensèk nwayo Linux - nan sitiyasyon sa a ENXIO dwe retounen.)
EROFS
chemen refere a yon dosye sou yon filesystem lekti sèlman epi yo te mande aksè ekri.
ETXTBSY
chemen refere a yon imaj ègzèkutabl ki se kounye a ke yo te egzekite ak ekri aksè te mande.
EFAULT
pwen chemen deyò espas ki aksesib adrès ou.
ELOOP
Twòp lyen senbolik yo te rankontre nan rezoud chemen , oswa O_NOFOLLOW te espesifye men chimen te yon lyen senbolik.
ENOSPC
Dwe te dwe kreye men aparèy la ki gen chemen pa gen okenn plas pou dosye a nouvo.
ENOMEM
Ensifizan memwa Kernel te disponib.
EMFILE
Pwosesis la deja gen maksimòm kantite dosye ouvè.
ENFILE
Limit la sou kantite total dosye ouvè sou sistèm lan te rive.
Konfòme yo
SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Drapo O_NOFOLLOW ak O_DIRECTORY yo se Linux espesifik. Youn ka gen pou defini macro _GNU_SOURCE pou jwenn definisyon yo.
Restriksyon
Gen anpil infelicities nan pwotokòl NFS ki kache, ki afekte pami lòt moun O_SYNC ak O_NDELAY .
POSIX bay pou twa varyant diferan nan senkronize I / O, ki koresponn ak drapo yo O_SYNC , O_DSYNC ak O_RSYNC . Kounye a (2.1.130) sa yo, se tout sinonim anba Linux.