Kopsavilkums
#include << A HREF = "file: /usr/include/sys/types.h"> sys / types.h> #include << HREF = "file: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "file: /usr/include/fcntl.h"> fcntl.h> int atvērt (const char * pathname , int karodziņi ); int atvērts (const char * pathname , int karodziņi , mode_t režīms ); int creat (const char * pathname , mode_t režīms );Apraksts
Atvērtā () sistēmas izsaukuma linux komanda tiek izmantota, lai pārveidotu pathname par faila deskriptoru (maza, ne-negatīva vesela skaitļa izmantošana turpmākajā I / O kā ar lasīšanas , rakstīšanas utt.). Kad zvans ir veiksmīgs, faila deskriptors atgriezās, tas ir viszemākais faila deskriptors, kas šobrīd procesā nav atvērts. Šis zvans izveido jaunu atvērtu failu, nevis kopīgots ar citiem procesiem. (Taču kopīgi atvērtie faili var rasties, izmantojot sistēmas (sistēmas) zvanu (2). Jaunais failu deskriptors ir iestatīts tā, lai tas paliek atvērts visās izpildes funkcijās (sk. Fcntl (2)). Faila nobīde ir iestatīta uz faila sākumu.
Parametru karodziņi ir viens no O_RDONLY , O_WRONLY vai O_RDWR, kas lūdz atvērt failu tikai lasīšanai, tikai rakstīšanai vai lasīšanai / rakstīšanai, attiecīgi bitu vai d ar nulli vai vairāk no šādām:
O_CREAT
Ja fails nepastāv, tas tiks izveidots. Faila īpašnieks (lietotāja ID) ir iestatīts uz procesa efektīvu lietotāja ID. Grupas īpašumtiesības (grupas ID) tiek iestatītas vai nu uz procesa faktisko grupas ID vai mātes kataloga grupas ID (atkarībā no failu sistēmas tipa un piestiprināšanas iespējām un mātes direktorijas režīma, skatīt, piemēram, mount opcijas bsdgroups un sysvgroups no ext2 failu sistēmas, kā aprakstīts mount (8)).
O_EXCL
Lietojot kopā ar O_CREAT , ja fails jau eksistē, tas ir kļūda, un atvērtais neizdosies. Šajā kontekstā pastāv simboliska saite neatkarīgi no tā, kur tā norāda. O_EXCL ir sadalīta NFS failu sistēmās , programmās, kuras izmanto atslēgas uzdevumu veikšanai, tiks noteikts sacensību stāvoklis. Atmiņas faila bloķēšanas izpildes risinājums, izmantojot lockfile, ir izveidot unikālu failu uz tiem pašiem fs (piem., Iekļaujot saimniekdatora nosaukumu un pid), izmantot saiti (2), lai izveidotu saiti uz bloķēšanas fails. Ja saite () atgriež 0, atslēga ir veiksmīga. Pretējā gadījumā izmantojiet stat (2) unikālajā failā, lai pārbaudītu, vai tā saišu skaits ir palielinājies līdz 2, un šādā gadījumā arī atslēga ir veiksmīga.
O_NOCTTY
Ja pathname attiecas uz termināla ierīci --- skatiet tty (4) --- tas nekļūst par procesa vadības terminālu pat tad, ja procesam nav tā.
O_TRUNC
Ja fails jau eksistē un ir regulārs fails, un atvērtais režīms ļauj rakstīt (ti, ir O_RDWR vai O_WRONLY), tas tiks saīsināts līdz 0. garumam. Ja fails ir FIFO vai termināla ierīces fails, O_TRUNC karogs tiek ignorēts. Pretējā gadījumā O_TRUNC ietekme nav precīza. (Daudzās Linux versijās tas tiks ignorēts, citās versijās tiks atgriezta kļūda.)
O_APPEND
Fails tiek atvērts pievienošanas režīmā. Pirms katra rakstīšanas faila rādītājs tiek novietots faila beigās tā, it kā ar lseek . O_APPEND var novest pie bojātiem failiem NFS failu sistēmās, ja vairākos procesos vienlaikus failā tiek pievienoti dati. Tas ir tāpēc, ka NFS neatbalsta faila pievienošanu, tāpēc klienta kodolam ir jāmodulē tā, ko nevar izdarīt bez sacensību stāvokļa.
O_NONBLOCK vai O_NDELAY
Ja iespējams, fails tiek atvērts bez bloķēšanas režīmā. Nedz atklātā, nedz arī turpmākā darbība faila deskriptorā, kas tiek atgriezts, izraisīs izsaucēja procesu gaidīšanu. FIFO apstrādei (nosauktajām caurulēm) skatīt arī FIFO (4). Šis režīms nedrīkst ietekmēt failus, kas nav FIFO.
O_SYNC
Fails ir atvērts sinhronai I / O. Jebkurš uzrakstītais rezultātu faila deskriptors bloķē izsaukuma procesu, kamēr dati fiziski nav uzrakstīti uz pamata aparatūru. Tomēr skatiet sadaļu IEROBEŽOJUMI.
O_NOFOLLOW
Ja pathname ir simboliska saite, tad atvēršana neizdodas. Šis ir FreeBSD paplašinājums, kas tika pievienots Linux versijai 2.1.126. Turpmāk tiks ievērotas simbola saites agrāk pazīmju sastāvdaļās. Glibc 2.0.100 un jaunākajās virsrakstos ir iekļauts šī karoga definīcija; kodoli pirms 2.1.126 ignorēs to, ja tiks izmantots .
O_DIRECTORY
Ja pathname nav direktorija, atveriet to neizdevās. Šis karodziņš ir specifisks Linux, un tas tika pievienots kodola versijā 2.1.126, lai izvairītos no problēmām, ja opendir (3) tiek izsaukta FIFO vai lentes ierīcē, bet to nedrīkst izmantot ārpus opendir ieviešanas .
O_DIRECT
Centieties samazināt ieejas / izejas kešatmiņas efektus uz un no šī faila. Parasti tas samazinās veiktspēju, taču tas ir noderīgs īpašās situācijās, piemēram, kad lietojumprogrammas veic savu caching. Failu I / O tiek veikts tieši uz / no lietotāja telpas buferiem. I / O ir sinhronā, ti, pēc pabeigtā lasīšanas (2) vai rakstīšanas (2) sistēmas zvana dati ir garantēti pārsūtīti. Pārsūtīšanas izmēri un lietotāja bufera un failu nobīde ir jāpielāgo faila sistēmas loģiskā bloka lielumam.
Šis karodziņš tiek atbalstīts vairākās Unix līdzīgās sistēmās; atbalsts tika pievienots Linux kodola versijā 2.4.10.
Blanku ierīču semantiski līdzīgs interfeiss ir aprakstīts neapstrādātā veidā (8).
O_ASYNC
Izveidojiet signālu (SIGIO pēc noklusējuma, bet to var mainīt ar fcntl (2)), ja šajā faila deskriptorā ir iespējama ievade vai izvade. Šī funkcija ir pieejama tikai termināļiem, pseido termināliem un kontaktligzdām. Sīkāku informāciju skatiet fcntl (2).
O_LARGEFILE
32 bitu sistēmās, kas atbalsta lielo failu sistēmu, atļaut atvērt failus, kuru izmērus nevar attēlot 31 biti.
Daži no šiem izvēles karodziņiem var tikt mainīti, izmantojot fcntl pēc faila atvēršanas.
Argumentu režīms precizē atļaujas izmantot, ja tiek izveidots jauns fails. Parasti tas tiek mainīts ar procesa umask : izveidotā faila atļaujas ir (režīms & ~ umask) . Ievērojiet, ka šis režīms attiecas tikai uz jaunizveidotā faila nākotnes piekļuvi; atvērtā zvana, kas izveido tikai lasāmu failu, var atgriezt lasīšanas / rakstīšanas faila deskriptoru.
Režīmam ir paredzētas šādas simboliskās konstantes:
S_IRWXU
00700 lietotājs (faila īpašnieks) ir izlasījis, rakstījis un izpildījis atļauju
S_IRUSR (S_IREAD)
00400 lietotājs ir lasījis atļauju
S_IWUSR (S_IWRITE)
00200 lietotājam ir rakstīšanas atļauja
S_IXUSR (S_IEXEC)
00100 lietotājs ir izpildīt atļauju
S_IRWXG
00070 grupa ir lasījusi, rakstījusi un izpildījusi atļauju
S_IRGRP
00040 grupa ir lasījusi atļauju
S_IWGRP
00020 grupai ir rakstīšanas atļauja
S_IXGRP
00010 grupai ir izpildes atļauja
S_IRWXO
00007 citi ir lasījuši, rakstījuši un izpildījuši atļauju
S_IROTH
00004 citi ir lasījuši atļauju
S_IWOTH
00002 citi ir rakstīšanas atļauja
S_IXOTH
00001 citi ir izpildīt atļauju
režīms ir jānorāda, kad O_CREAT atrodas karodziņos un tiek ignorēts citādi.
Creat ir līdzvērtīgs atvēršanai ar karodziņiem, kas ir vienādi ar O_CREAT | O_WRONLY | O_TRUNC .
ATGRIEŠANĀS VĒRTĪBA
atveras un creat atgriež jauno failu deskriptoru vai -1 ja rodas kļūda (šādā gadījumā errno ir iestatīts atbilstoši). Ņemiet vērā, ka atvērt var atvērt ierīces īpašos failus, taču creat nevar tos izveidot - izmantojiet mknod (2).
Ieslēdzot NFS failu sistēmas ar UID kartēšanu, var atgriezties faila deskriptors, bet, piemēram, lasīt (2) pieprasījumus tiek liegta ar EACCES . Tas ir tāpēc, ka klients veic atvērt , pārbaudot atļaujas, bet serveris veic UID kartēšanu pēc lasīšanas un rakstīšanas pieprasījumiem.
Ja fails ir tikko izveidots, tā atime, ctime, mtime lauki ir iestatīti uz pašreizējo laiku, un tā ir mātes kataloga lauki ctime un mtime. Pretējā gadījumā, ja fails tiek modificēts O_TRUNC karoga dēļ, tā ctime un mtime lauki ir iestatīti uz pašreizējo laiku.
Kļūdas
EEXIST
pathname jau pastāv, un tika izmantoti O_CREAT un O_EXCL .
EISDIR
pathname attiecas uz direktoriju un pieprasīto piekļuvi rakstiski (tas ir, O_WRONLY vai O_RDWR ir iestatīts).
EACCES
Pieprasītā piekļuve failam nav atļauta, vai arī viens no lietvārdnīcas direktorijiem neļāva veikt meklēšanu (izpildīt), vai arī fails vēl neeksistēja, un rakstīt piekļuvi mātes katalogam nav atļauts.
ENAMETOOLONG
Pathname bija pārāk garš.
ENOENT
O_CREAT nav iestatīts, un nosauktais fails neeksistē. Vai arī ceļazīmes direktorijas komponents nepastāv vai tā ir simboliska saite.
ENOTDIR
Daļa, ko izmanto kā direktoriju pathname , patiesībā nav direktorija, vai arī ir norādīts O_DIRECTORY un pathname nav direktorija.
ENXIO
O_NONBLOCK | O_WRONLY ir iestatīts, nosauktais fails ir FIFO un neviens process neatver datumu lasīšanai. Vai arī fails ir ierīces īpašais fails, un nav atbilstošas ierīces.
ENODEV
pathname attiecas uz ierīces īpašo failu un nav atbilstošas ierīces. (Šī ir Linux kodola kļūda - šai situācijā ENXIO jāatgriež.)
EROFS
Pathname attiecas uz failu tikai lasāmā faila sistēmā, un pieprasīta rakstīšanas piekļuve.
ETXTBSY
Pathname attiecas uz izpildāmo attēlu, kas pašlaik tiek izpildīts, un tika pieprasīta piekļuve rakstīšanai.
EFAULT
pieturas vietas ārpus jūsu pieejamās adreses vietas.
ELOOP
Risinot pathname , radās pārāk daudz simbolisku saišu, vai arī tika norādīts O_NOFOLLOW, bet pathname bija simboliska saite.
ENOSPC
Pathname tika izveidots, bet ierīcei, kurā ir pathname, jaunai failai nav vietas.
ENOMEM
Nepietiekama kernel atmiņa bija pieejama.
EMFILE
Procesam jau ir atvērts maksimālais failu skaits.
ENFILE
Ir sasniegts kopējais sistēmā atvērto failu skaits.
Atbilstoši
SVr4, SVID, POSIX, X / OPEN, BSD 4.3. O_NOFOLLOW un O_DIRECTORY karodziņi ir specifiski Linux . Lai noteiktu definīcijas, var būt nepieciešams definēt _GNU_SOURCE makro.
Ierobežojumi
Protokolā, kas ir NFS pamatā, ir daudz nelaime, un tas ietekmē O_SYNC un O_NDELAY .
POSIX nodrošina trīs dažādus sinhronizētu I / O variantus, kas atbilst O_SYNC , O_DSYNC un O_RSYNC karogiem . Pašlaik (2.1.130.) Visi tie ir sinonīmi saskaņā ar Linux.