Aprann Louvri Kòmandman Linux la

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.