Skip to main content

Atveriet Linux komandu un Unix komandu

Anonim

Kopsavilkums

#include #include #include int atvērts (const char * pathname , int karogi ); int atvērts (const char * pathname , int karogi , mode_t režīms ); int creat (const char * pathname , mode_t režīms );

Apraksts

Theatvērt () sistēmas izsaukums linux komandu izmanto, lai pārvērstu pathname par faila deskriptoru (neliels, ne-negatīvs vesels skaitlis, ko izmanto turpmākajā I / O kā ar lasīt, rakstīt, 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 koplietotie atvērtie faili var rasties, izmantojotdakša(2) sistēmas izsaukums.) Jaunais failu deskriptors ir iestatīts palikt atvērts pāri exec funkcijām (skfcntl(2)). Faila nobīde ir iestatīta uz faila sākumu.

Parametrs karogi ir viens noO_RDONLY, O_WRONLY vaiO_RDWR kas pieprasa atvērt failu tikai lasīšanai, tikai rakstīšanai vai lasīšanai / rakstīšanai, vai "d ar nulli vai vairāk no šādiem:

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 iespējas bsdgroups un sysvgroups no ext2 failu sistēmas, kā aprakstītsmontēt(8)).

O_EXCL

Lietots kopā arO_CREAT, ja fails jau pastāv, tas ir kļūda unatvērts 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ām, kas balstās uz to, lai veiktu bloķēšanas uzdevumus, tiks noteikts sacensību stāvoklis. Atmiņas faila bloķēšanas veikšanai ar lockfile ir jāizveido unikāls fails ar vienādu fs (piem., Iekļaujot saimniekdatora nosaukumu un pid), izmantojiet saiti (2), lai izveidotu saiti uz bloķēšanas fails. Jasaite () 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 gala ierīci --- sktty(4) --- tas nekļūst par procesa vadības terminālu, pat ja procesam nav tā.

O_TRUNC

Ja fails jau eksistē un ir regulārs fails, un atvērtais režīms ļauj rakstīt (t.i., tas 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 katrarakstīt, faila rādītājs ir novietots faila beigās, it kā arlseek. 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 vaiO_NDELAY

Ja iespējams, fails tiek atvērts bez bloķēšanas režīmā. Neviena noatvērts ne arī vēlākas darbības faila deskriptorā, kas tiek atgriezts, izraisīs izsaucēja procesu gaidīšana. FIFO apstrādei (nosauktajām caurulēm) skatiet arīFIFO(4). Šis režīms nedrīkst ietekmēt failus, kas nav FIFO.

O_SYNC

Fails ir atvērts sinhronai I / O. JebkurarakstītRezultātā faila deskriptors bloķē zvanīšanas procesu, līdz dati tiek fiziski rakstīti pamata aparatūrai. 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, izraisiet, lai atvērtu neizdoties. Šis karodziņš ir specifisks Linux, un tas tika pievienots kodola versijā 2.1.126, lai izvairītos no pakalpojuma problēmām, jaopendirs(3) tiek izsaukta uz FIFO vai lentes ierīci, bet to nedrīkst izmantot ārpusopendirs.

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 sinhrona, t.i., aizpildot lasīt(2) vairakstīt(2) sistēmas zvans, dati tiek 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.Semantiski līdzīgs interfeiss bloka ierīcēm ir aprakstītsneapstrādāts(8).

O_ASYNC

Izveidot signālu (SIGIO pēc noklusējuma, bet to var mainīt arfcntl(2)), kad ievades vai izvades kļūst iespējams šajā faila deskriptorā. Šī funkcija ir pieejama tikai termināļiem, pseido termināliem un kontaktligzdām. Skatītfcntl(2), lai saņemtu sīkāku informāciju.

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žus no šiem izvēles karogiem var mainīt, izmantojotfcntl pēc faila atvēršanas.

Arguments režīms norāda atļaujas izmantot, ja tiek izveidots jauns fails. To groza ar procesa palīdzībuumask parastajā veidā: izveidotā faila atļaujas ir(režīms & ~ umask). Ievērojiet, ka šis režīms attiecas tikai uz jaunizveidotā faila nākotnes piekļuvi; theatvērtszvans, kas rada tikai lasāmu failu, var atgriezt lasīšanas / rakstīšanas faila deskriptoru.

Ir paredzētas šādas simboliskās konstantes režīms :

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 jānorāda, kadO_CREAT ir karogi , un pretējā gadījumā tiek ignorēts.

creat ir vienāds aratvērts ar karogi vienāds arO_CREAT | O_WRONLY | O_TRUNC.

ATGRIEŠANĀS VĒRTĪBA

atvērts uncreat atgrieziet jauno faila deskriptoru vai -1, ja radusies kļūda (šādā gadījumā errno ir atbilstoši iestatīts). Pieraksti toatvērts var atvērt ierīces īpašos failus, betcreat nevar izveidot tos - izmantojietmknod(2) vietā.

NFS failu sistēmās, kurās iespējota UID kartēšana,atvērts var atgriezt failu deskriptoru, bet, piemēram, lasīt(2) pieprasījumi ir noraidīti arEACCES. Tas ir tāpēc, ka klients veicatvērts 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 unO_CREAT unO_EXCL tika izmantoti.

EISDIR

pathname attiecas uz direktoriju un pieprasīto piekļuvi rakstiski (tas ir,O_WRONLY vaiO_RDWR ir iestatīts).

EACCES

Pieprasītā piekļuve failam nav atļauta, vai arī kāds no direktorijiem tajā ir pathname 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ī kataloga komponents vietnē pathname nepastāv vai tā ir simboliska saikne.

ENOTDIR

Komponents, ko izmanto kā direktoriju iekšā pathname patiesībā nav direktorija vaiO_DIRECTORYtika norādīts un pathname nebija 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šu 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 tiek pieprasīta piekļuve rakstīšanai.

ETXTBSY

pathname attiecas uz izpildāmu attēlu, kas pašlaik tiek izpildīts, un tiek pieprasīta piekļuve rakstīšanai.

EFAULT

pathname punkti ārpus jūsu pieejamās adreses vietas.

ELOOP

Risinot, radās pārāk daudz simbolisku saišu pathname , vaiO_NOFOLLOW tika norādīts, bet pathname bija simboliska saite.

ENOSPC

pathname bija jāizveido, bet ierīce satur pathname nav vietas jaunajam failam.

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.3O_NOFOLLOW unO_DIRECTORY karodziņi ir specifiski Linux. Var būt nepieciešams definēt_GNU_SOURCE makro, lai iegūtu to definīcijas.

Ierobežojumi

Protokolā, kas ir NFS pamatā, ir daudz nelaime, kas ietekmē cita starpāO_SYNC unO_NDELAY.

POSIX piedāvā trīs dažādus sinhronizētu I / O variantus, kas atbilst karodziņiemO_SYNC , O_DSYNC un O_RSYNC. Pašlaik (2.1.130.) Visi tie ir sinonīmi saskaņā ar Linux.