Uzziniet Linux Command Open

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.