Tgħallem il-Kmand tal-Linux Miftuħ

Sinteżi

#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 miftuħ (const char * pathname , int bnadar ); int miftuħ (const char * pathname , int bnadar , modalità mode_t ); int creat (const char * pathname , modalità mode_t );

Deskrizzjoni

Il- kmand tas-sejħa tas-sistema miftuħa ( linux) huwa wżat biex jikkonverti pathname għal deskrittur tal-fajl (numru sħiħ żgħir u mhux negattiv għall-użu f'I / O sussegwenti bħal ma jinqara , jikteb , eċċ). Meta s-sejħa tkun suċċess, id-deskrittur tal- fajl għandu jkun id-deskrittur tal-fajl l-aktar baxx li bħalissa mhux miftuħ għall-proċess. Din is-sejħa toħloq fajl ġdid miftuħ, mhux maqsum ma 'xi proċess ieħor. (Imma fajls maqsuma miftuħin jistgħu jinqalgħu permezz tas-sejħa tas-sistema tal- furketta (2).) Id-deskrittur tal-fajl il-ġdid huwa stabbilit li jibqa 'miftuħ f'funzjonijiet eżekutorji (ara fcntl (2)). L-offset tal-fajl huwa ssettjat fil-bidu tal-fajl.

Il- bnadar tal- parametru huwa wieħed minn O_RDONLY , O_WRONLY jew O_RDWR li jitolbu l-ftuħ tal-fajl read-only, write-only jew read / write rispettivament, bitwise- jew 'd b'żero jew aktar minn dawn li ġejjin:

O_CREAT

Jekk il-fajl ma jeżistix, se tinħoloq. Is-sid (user ID) tal-fajl huwa ssettjat għall-ID tal-utent effettiv tal-proċess. Is-sjieda tal-grupp (ID tal-grupp) hija ffissata jew għall-ID tal-grupp effettiv tal-proċess jew għall-grupp ID tad-direttorju prinċipali (skond it-tip ta 'sistema ta' fajl u l-għażliet ta 'mmuntar, u l-mod tad-direttorju parent, ara, għażliet bsdgroups u sysvgroups tas-sistema ta 'fajls ext2, kif deskritt fl- impunjazzjoni (8)).

O_EXCL

Meta jintuża ma ' O_CREAT , jekk il-fajl diġà jeżisti huwa żball u l- miftuħ ifalli. F'dan il-kuntest, teżisti rabta simbolika, irrispettivament minn fejn tindika l-punt. O_EXCL huwa maqsum f'sistemi ta 'fajls NFS , programmi li jiddependu fuqu biex iwettqu l-kompiti tal-qfil ikollhom kondizzjoni ta' razza. Is-soluzzjoni għat-twettiq tal-fajl atomiku li ssakkar bl-użu ta 'lockfile hija li toħloq fajl uniku fuq l-istess fs (eż. Li tinkorpora hostname u pid), uża rabta (2) biex tagħmel link għall-fajl ta' lock. Jekk il- link () jirritorna 0, il-lock ikun suċċess. Inkella, uża stat (2) fuq il-fajl uniku biex tivverifika jekk l-għadd tal-link tagħha żdiedx għal 2, f'liema każ is-serratura wkoll tkun ta 'suċċess.

O_NOCTTY

Jekk pathname jirreferi għal apparat terminali --- ara tty (4) --- mhux se jsir it-terminal tal-kontroll tal-proċess anki jekk il-proċess ma jkollux wieħed.

O_TRUNC

Jekk il-fajl diġà jeżisti u huwa fajl regolari u l-mod miftuħ jippermetti l-kitba (jiġifieri, huwa O_RDWR jew O_WRONLY) se jkun maqtugħ għal tul 0. Jekk il-fajl huwa FIFO jew fajl ta 'apparat terminali, il-bandiera O_TRUNC hija injorata. Inkella, l-effett ta 'O_TRUNC mhuwiex speċifikat. (Fuq bosta verżjonijiet Linux se tiġi injorata; fuq verżjonijiet oħra, se tirritorna żball).

O_APPEND

Il-fajl jinfetaħ fil-modalità mehmuża. Qabel kull tikteb , il-pointer tal-fajl jitqiegħed fl-aħħar tal-fajl, daqslikieku bil- lseek . O_APPEND jista 'jwassal għal fajls korrotti fis-sistemi tal-fajls NFS jekk aktar minn proċess wieħed jżid id-data ma' fajl f'daqqa. Dan minħabba li l-NFS ma tappoġġjax li tingħaqad ma 'fajl, għalhekk il-kernel tal-klijent għandu jissimulah, li ma jistax isir mingħajr kondizzjoni ta' razza.

O_NONBLOCK jew O_NDELAY

Meta jkun possibbli, il-fajl jinfetaħ f'modalità li ma tinfetaħx. La l-operat miftuħ u lanqas kwalunkwe sussegwenti fuq id-deskrittur tal-fajl li jiġi rritornat iwassal biex il-proċess tas-sejħa jistenna. Għall-immaniġġjar tal-FIFOs (pajpijiet imsemmija), ara wkoll fifo (4). Din il-modalità m'għandhiex għalfejn ikollha effett fuq fajls għajr FIFOs.

O_SYNC

Il-fajl jinfetaħ għall-I / O sinkroniku. Kwalunkwe jikteb fuq id-deskrittur tal-fajl li jirriżulta għandu jimblokka l-proċess tas-sejħa sakemm id-data tkun ġiet miktuba fiżikament fuq il-hardware sottostanti. Ara RESTRIZZJONIJIET hawn taħt, għalkemm.

O_NOFOLLOW

Jekk pathname hija rabta simbolika, allura l-miftuħ ifalli. Din hija estensjoni ta 'FreeBSD, li ġiet miżjuda ma' Linux fil-verżjoni 2.1.126. Rabtiet simboliċi f'komponenti preċedenti tal-pathname għadhom ikunu segwiti. L-intestaturi minn glibc 2.0.100 u wara jinkludu definizzjoni ta 'din il-bandiera; Il-qlub qabel 2.1.126 se jinjorah jekk jintuża .

O_DIRECTORY

Jekk il- pathname mhix direttorju, jikkawża li l-miftuħ ifalli. Dan il-bandiera huwa speċifiku għall-Linux, u ġie miżjud fil-verżjoni 2.1.126 tal-għadma, sabiex jiġu evitati problemi ta 'ċaħda tas-servizz jekk opendir (3) jissejjaħ apparat FIFO jew tejp, iżda m'għandux jintuża barra mill- .

O_DIRECT

Ipprova jimminimizza l-effetti tal-cache tal-I / O lil u minn dan il-fajl. B'mod ġenerali dan inaqqas il-prestazzjoni, iżda huwa utli f'sitwazzjonijiet speċjali, bħal meta l-applikazzjonijiet jagħmlu l-caching tagħhom stess. Il-fajl I / O isir direttament lil / minn buffers ta 'l-ispazju ta' l-utent. L-I / O hija sinkronika, jiġifieri, meta titlesta s-sejħa tas-sistema li tinqara (2) jew tikteb (2), id-dejta hija garantita li ġiet trasferita. Id-daqsijiet tat-trasferiment, u l-allinjament tal-buffer tal-utent u l-ikkumpensar tal-fajls kollha għandhom ikunu multipli tad-daqs tal-blokka loġika tas-sistema tal-fajl.
Din il-bandiera hija appoġġjata fuq numru ta 'sistemi simili għal Unix; L-appoġġ ġie miżjud taħt Linux fil-verżjoni bil-qalba 2.4.10.
Interface semantikament simili għall-apparati tal-blokk huwa deskritt f'materjal nej (8).

O_ASYNC

Iġġenera sinjal (SIGIO awtomatikament, iżda dan jista 'jinbidel permezz ta' fcntl (2)) meta d-dħul jew il-ħruġ isir possibbli fuq dan id-deskrittur tal-fajl. Din il-karatteristika hija disponibbli biss għal terminali, psewdo-terminali, u sokits. Ara fcntl (2) għal aktar dettalji.

O_LARGEFILE

Fis-sistemi ta '32 bit li jappoġġaw is-Sistema tal-Fajls Kbar, jippermettu fajls li d-daqs tagħhom ma jistgħux ikunu rappreżentati f'31 bits li għandhom jinfetħu.

Xi wħud minn dawn il-bnadar fakultattivi jistgħu jinbidlu bl-użu ta ' fcntl wara li l-fajl ikun infetaħ.

Il- mod ta ' argument jispeċifika l-permessi għall-użu fil-każ li jinħoloq fajl ġdid. Huwa modifikat mill- umask tal-proċess bil-mod normali: il-permessi tal-fajl maħluq huma (mod & ~ umask) . Innota li din il-modalità tapplika biss għal aċċessi futuri tal-fajl li għadu kemm ġie maħluq; is - sejħa miftuħa li toħloq fajl li jinqara biss tista 'tirritorna d-deskrittur tal-fajl jinqara / jikteb.

Il-kostanti simboliċi li ġejjin huma pprovduti għall- modalità :

S_IRWXU

00700 utent (sid tal-fajl) qrajt, kitbet u esegwixxi l-permess

S_IRUSR (S_IREAD)

L-utent ta '00400 ingħata permess

S_IWUSR (S_IWRITE)

00200 utent ikollu permess għal kitba

S_IXUSR (S_IEXEC)

L-utent ta '00100 iwettaq permess

S_IRWXG

00070 grupp qrajt, kitbet u esegwixxi l-permess

S_IRGRP

00040 grupp ħassar permess

S_IWGRP

00020 grupp għandu permess ta 'kitba

S_IXGRP

Il-grupp 00010 għandu jwettaq il-permess

S_IRWXO

00007 oħrajn qrajtu, kitbu u jesegwixxu l-permess

S_IROTH

00004 oħrajn għandhom permess jinqara

S_IWOTH

00002 oħrajn għandhom permess ta 'kitba

S_IXOTH

00001 oħrajn iwettqu permess

Il-modalità għandha tkun speċifikata meta O_CREAT ikun fil- bnadar , u huwa injorat mod ieħor.

Il-krejat huwa ekwivalenti għal tiftaħ b ' bnadar daqs O_CREAT | O_WRONLY | O_TRUNC .

RITORN TAL-VALUR

open and creat iwassal id-deskrittur tal-fajl il-ġdid, jew -1 jekk ikun seħħ żball (f'liema każ, errno huwa stabbilit b'mod xieraq). Innota li miftuħ jista 'jiftaħ fajls speċjali ta' tagħmir, iżda l- krejat ma jistax joħloqhom - minflok juża mknod (2).

Fuq is-sistemi tal-fajls NFS bl-immappjar tal-UID attivat, miftuħ jista 'jirritorna d-deskrittur tal-fajl, eż. Pereżempju jinqraw (2) talbiet huma miċħuda b'ECACCES . Dan huwa minħabba li l-klijent iwettaq miftuħ billi jiċċekkja l-permessi, iżda l-immappjar tal-UID jitwettaq mis-server fuq rikjesti ta 'qari u kitba.

Jekk il-fajl huwa maħluq ġdid, l-atime, ctime, l-oqsma mtime tiegħu huma ssettjati sal-ħin attwali, u għalhekk huma l-kampijiet ctime u mtime tad-direttorju parent. Inkella, jekk il-fajl huwa mmodifikat minħabba l-bandiera ta 'O_TRUNC, l-oqsma ctime u mtime tagħhom huma ssettjati sal-ħin attwali.

Żbalji

EEXIST

pathname diġà jeżisti u O_CREAT u O_EXCL intużaw.

EISDIR

pathname jirreferi għal direttorju u l-aċċess mitlub bil-miktub involut (jiġifieri, O_WRONLY jew O_RDWR huwa stabbilit).

EACCES

L-aċċess mitlub għall-fajl mhuwiex permess, jew wieħed mid-direttorji fil- pathname ma ppermettiex permess għat-tiftix (tesegwixxi), jew il-fajl ma kienx għadu jeżisti u tikteb aċċess għad-direttorju parent mhux permess.

ENAMETOOLONG

mogħdija kienet twila wisq.

BĦALA

O_CREAT mhuwiex stabbilit u l-fajl imsemmi ma jeżistix. Jew, komponent tad-direttorju fir- pathname ma jeżistix jew huwa rabta simbolika li timmina.

ENOTDIR

Komponent użat bħala direttorju fil- pathname mhuwiex, fil-fatt, direttorju, jew O_DIRECTORY kien speċifikat u pathname ma kienx direttorju.

ENXIO

O_NONBLOCK | O_WRONLY huwa stabbilit, il-fajl imsemmi huwa FIFO u l-ebda proċess ma għandu l-fajl miftuħ għall-qari. Jew, il-fajl huwa fajl speċjali tal-mezz u l-ebda apparat korrispondenti ma jeżisti.

ENODEV

pathname tirreferi għal fajl speċjali ta 'tagħmir u l-ebda tagħmir korrispondenti ma jeżisti. (Dan huwa bug tal-qalba Linux - f'din is-sitwazzjoni ENXIO irid jintbagħat lura).

EROFS

pathname tirreferi għal fajl fuq sistema ta 'fajls li tinqara biss u ntalbet aċċess għall-kitba.

ETXTBSY

pathname tirreferi għal immaġni eżekutibbli li bħalissa qed tiġi esegwita u ġie mitlub aċċess għall-kitba.

EFAULT

Il- punti tal- mogħdija barra l-ispazju aċċessibbli għall-indirizz tiegħek.

ELOOP

Kien hemm wisq konnessjonijiet simboliċi fir-riżoluzzjoni tal- pathname , jew O_NOFOLLOW kien speċifikat iżda pathname kienet rabta simbolika.

ENOSPC

Il-pathname kellu jinħoloq iżda l-apparat li fih pathname m'għandu l-ebda spazju għall-fajl il-ġdid.

ENOMEM

Memorja insuffiċjenti tal-kernel kienet disponibbli.

EMFILE

Il-proċess diġà għandu l-akbar numru ta 'fajls miftuħa.

ENFILE

Il-limitu fuq in-numru totali ta 'fajls miftuħa fuq is-sistema ntlaħaq.

Konformi ma '

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Il-bnadar O_NOFOLLOW u O_DIRECTORY huma Linux- speċifiċi. Wieħed jista 'jkollu jiddefinixxi l-makro _GNU_SOURCE biex jikseb id-definizzjonijiet tagħhom.

Restrizzjonijiet

Hemm ħafna nuqqas ta 'qbil fil-protokoll sottostanti tal-NFS, li taffettwa fost oħrajn O_SYNC u O_NDELAY .

POSIX jipprovdi tliet varjanti differenti ta 'I / O sinkronizzati, li jikkorrispondu mal-bnadar O_SYNC , O_DSYNC u O_RSYNC . Bħalissa (2.1.130) dawn huma kollha sinonimu taħt Linux.