Sinopsis
#include
Opis
otvorena() Linux naredba za sustav poziva koristi se za pretvaranje staze u deskriptor datoteka (mali, ne-negativni cijeli broj za upotrebu u kasnijem I / O kao s čitati, pisati, itd.). Kada je poziv uspješan, descriptor datoteka vratit će se kao najniži deskriptor datoteka koji trenutno nije otvoren za taj proces. Ovaj poziv stvara novu otvorenu datoteku koja se ne dijeli s drugim postupkom. (Ali zajedničke otvorene datoteke mogu se pojaviti putem programaviljuška(2) poziv sustava.) Novi deskriptor datoteka je postavljen da ostane otvoren preko izvršnih funkcija (pogledajfcntl(2)). Offset datoteke je podešen na početak datoteke.
Parametar zastave je jedan odO_RDONLY, O_WRONLY iliO_RDWR koji zahtijevaju otvaranje datoteke samo za čitanje, samo za pisanje ili čitanje / pisanje, odnosno bitno- ili d s nula ili više od sljedećeg:
O_CREAT
Ako datoteka ne postoji, bit će stvoren. Vlasnik (korisnički ID) datoteke je postavljen na učinkovit korisnički ID procesa. Vlasništvo grupe (ID grupa) postavljeno je ili na učinkovitu grupnu ID procesa ili na ID grupe nadređenog imenika (ovisno o vrsti datotečnog sustava i opcijama pri montaži i načinu nadređenog imenika, vidi npr. Montiranje opcije bsdgroups i sysvgroups od ext2 datotečnog sustava, kao što je opisano umontiranje(8)).
O_EXCL
Kada se koristi sO_CREAT, ako datoteka već postoji, to je pogreška iotvorena neće uspjeti. U tom kontekstu postoji simbolična veza, bez obzira na to gdje to ukazuje.O_EXCL je slomljena na NFS datotečnim sustavima, programi koji se oslanjaju na to za obavljanje zadataka zaključavanja sadržavat će stanje utrke. Rješenje za zaključavanje atomske datoteke pomoću zaključanog zapisa je stvaranje jedinstvene datoteke na istom fs (npr., Ugrađivanje naziva hosta i pid), korištenje veze (2) kako bi se povezala s zaporkom. Akoveza() vraća 0, zaključavanje je uspješno. Inače, koristite stat(2) na jedinstvenu datoteku kako biste provjerili je li broj veze povećao na 2, u kojem slučaju je zaključavanje također uspješno.
O_NOCTTY
Ako ime putanje odnosi se na terminalni uređaj - viditTY(4) --- neće postati terminal za upravljanje procesom, čak i ako ga proces ne posjeduje.
O_TRUNC
Ako datoteka već postoji i redovna je datoteka, a otvoreni način dopušta pisanje (tj. O_RDWR ili O_WRONLY), skratit će se do duljine 0. Ako je datoteka datoteka FIFO ili terminalna, zastavica O_TRUNC zanemaruje se. Inače, učinak O_TRUNC nije određen. (Na mnogim Linux verzijama bit će zanemareno, a na ostalim će verzijama vratiti pogrešku.)
O_APPEND
Datoteka je otvorena u načinu dodavanja. Prije svakepisati, pokazivač datoteke nalazi se na kraju datoteke, kao u slučajulseek. O_APPEND može dovesti do oštećenih datoteka na NFS datotečnim sustavima ako više od jednog procesa doda podatke u datoteku odjednom. To je zato što NFS ne podržava pridruživanje datoteci, tako da je kernel klijenta mora simulirati, što se ne može učiniti bez uvjeta utrke.
O_NONBLOCK iliO_NDELAY
Kad je moguće, datoteka se otvara u načinu bez blokiranja. Niti jedanotvorena niti bilo kakve daljnje operacije na datotečnom datoteci koji se vraća uzrokovat će proces pozivanja da pričeka. Za rukovanje FIFO-ima (nazvanim cijevi), također pogledajteFIFO(4). Ovaj način ne smije imati nikakav učinak na druge datoteke osim FIFO-a.
O_SYNC
Datoteka je otvorena za sinkroni I / O. bilo kojipisatis na rezultirajućem deskriptoru datoteke blokirat će postupak zvanja sve dok se podaci fizički ne zapisuju na temeljni hardver. Ipak, pogledajte OGRANIČENJA.
O_NOFOLLOW
Ako ime putanje je simbolična veza, a zatim otvoreni ne uspije. Ovo je FreeBSD produžetak, koji je dodan u Linux u verziji 2.1.126. I dalje će se slijediti simboličke veze u ranijim komponentama staze. Zaglavlja s glibc 2.0.100 i novijih sadrže definiciju te zastave; kernele prije 2.1.126 će ga ignorirati ako se koriste .
O_DIRECTORY
Ako ime putanje nije direktorij, jer otvoreni neuspjeh. Ova je zastava specifična za Linux i dodana je u verziju 2.1.126 kernela, kako bi se izbjegli problemi s uskraćivanjem servisa akoopendir(3) poziva se na FIFO ili vrpcu, ali se ne smije koristiti izvan implementacijeopendir.
O_DIRECT
Pokušajte minimizirati efekte predmemorije I / O na i iz ove datoteke. Općenito to će degradirati performanse, ali je korisno u posebnim situacijama, primjerice kada aplikacije vrše svoje predmemoriranje. Datoteka I / O se vrši izravno na / iz korisničkih pufera. I / O je sinkroni, tj. Po završetku čitati(2) ilipisati(2) poziv sustava, podaci se zasigurno prenose. Veličine prijenosa i poravnavanje korisničkih međuspremnika i datoteka moraju biti višekratnici logičke veličine datotečnog sustava.Ta je oznaka podržana na više Unixovih sustava; podrška je dodana pod Linuxom u verziji 2.4.10 kernela.Opisano je semantički slično sučelje za blokovesirov(8). O_ASYNC Generirajte signal (SIGIO prema zadanim postavkama, ali to se može promijeniti putemfcntl(2)) kada ulaz ili izlaz postaje moguć na ovom deskriptoru datoteka. Ova je značajka dostupna samo za terminale, pseudo-terminale i utičnice. Vidjetifcntl(2) za daljnje pojedinosti. O_LARGEFILE Na 32-bitnim sustavima koji podržavaju Large Files System, dozvoljavaju se datoteke čije se veličine ne mogu prikazati u 31 bita da budu otvorene. Neke od ovih neobaveznih zastavica mogu se mijenjati pomoćufcntl nakon što je datoteka otvorena. Argument način određuje dopuštenja za upotrebu u slučaju stvaranja nove datoteke. Promijenjen je procesomumask na uobičajeni način: dopuštenja stvorene datoteke su(način & umas), Imajte na umu da se ovaj način odnosi samo na buduće pristupnice novo stvorene datoteke;otvorenapoziv koji stvara datoteku samo za čitanje može dobro vratiti deskriptor datoteka za čitanje / pisanje. Sljedeće simboličke konstante su predviđene način : S_IRWXU 00700 korisnik (vlasnik datoteke) je pročitao, napisao i izvršio dozvolu S_IRUSR (S_IREAD) 00400 korisnik je pročitao dopuštenje S_IWUSR (S_IWRITE) 00200 korisnik ima dopuštenje za pisanje S_IXUSR (S_IEXEC) Korisnik 00100 izvršio je dopuštenje S_IRWXG 00070 grupa je pročitao, napisao i izvršio dozvolu S_IRGRP 00040 grupa je pročitala dopuštenje S_IWGRP 00020 grupa ima dopuštenje za pisanje S_IXGRP 00010 grupa je izvršila dopuštenje S_IRWXO 00007 drugi su pročitali, pisali i izvršili dopuštenje S_IROTH Ostali 00004 imaju dopuštenje za čitanje S_IWOTH Ostali 00002 imaju dopuštenje za pisanje S_IXOTH 00001 ostali su izvršili dopuštenje način mora se navesti kadaO_CREAT je u zastave , i drugačije se zanemaruje. kreiran je ekvivalentanotvorena s zastave jednakO_CREAT | O_WRONLY | O_TRUNC. POVRATNA VRIJEDNOST otvorena ikreiran vratiti novi deskriptor datoteka ili -1 ako se dogodila pogreška (u tom slučaju, errno je postavljen na odgovarajući način). Imajte na umu daotvorena mogu otvoriti posebne datoteke uređaja, alikreiran ne mogu ih stvoriti - koristitimknod(2). Na NFS datotečnim sustavima s omogućenim mapiranjem UID,otvorena može vratiti deskriptor datoteka, npr. čitati(2) zahtjevi su odbijeni saEACCES, To je zato što klijent izvodiotvorena provjerom dopuštenja, ali UID mapiranje obavlja poslužitelj nakon čitanja i pisanja zahtjeva. Ako je datoteka nedavno kreirana, njegovi atime, ctime, mtime polja su postavljeni na trenutačno vrijeme, kao i polja ctime i mtime roditeljskog direktorija. U suprotnom, ako je datoteka izmijenjena zbog oznake O_TRUNC, polja ctime i mtime postavljena su na trenutačno vrijeme. EEXIST ime putanje već postoji iO_CREAT iO_EXCL su korišteni. EISDIR ime putanje odnosi se na imenik i pristup koji se traži uključuje pisanje (tj.O_WRONLY iliO_RDWR je postavljen). EACCES Zatraženi pristup datoteci nije dopušten ili je jedan od direktorija u sustavu ime putanje nije dopušteno pretraživanje (izvršavanje) ili datoteka još nije postojala i nije dopušten pristup pisma roditeljskog direktorija. ENAMETOOLONG ime putanje bio je predug. ENOENT O_CREAT nije postavljen i navedena datoteka ne postoji. Ili, komponenta direktorija u sustavu ime putanje ne postoji ili je vješta simbolička veza. ENOTDIR Komponenta koja se koristi kao direktorij u sustavu ime putanje zapravo nije direktorij, iliO_DIRECTORYje specificiran i ime putanje nije bio direktorij. ENXIO O_NONBLOCK | O_WRONLY je postavljen, nazvana datoteka je FIFO i nema procesa koji ima otvorenu datoteku za čitanje. Ili, datoteka je posebna datoteka uređaja i ne postoji odgovarajući uređaj. ENODEV ime putanje odnosi se na posebnu datoteku uređaja i nema odgovarajućeg uređaja. (Ovo je Linux kernel bug - u ovoj situaciji ENXIO se mora vratiti.) EROFS ime putanje odnosi se na datoteku na datotečnom sustavu samo za čitanje i zahtijeva se pristup za pisanje. ETXTBSY ime putanje odnosi se na izvršnu sliku koja se trenutno izvodi i zahtijeva se pisanje. EFAULT ime putanje bodova izvan dostupnog adresnog prostora. ELOOP Previše simboličkih veza naišlo je na rješavanje ime putanje , iliO_NOFOLLOW je navedeno, ali ime putanje bila je simbolična veza. ENOSPC ime putanje trebalo je stvoriti, ali uređaj koji sadrži ime putanje nema mjesta za novu datoteku. ENOMEM Dostupna je nedovoljna memorija jezgre. EMFILE Proces već ima maksimalan broj datoteka otvorenih. ENFILE Dosegnuto je ograničenje ukupnog broja otvorenih datoteka na sustavu. SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW iO_DIRECTORY zastave su specifične za Linux. Možda ćete morati definirati_GNU_SOURCE makro kako bi dobili njihove definicije. U protokolima koji se nalaze pod NFS-om postoje mnoge nevjere, koje utječu među ostalimaO_SYNC iO_NDELAY. POSIX omogućuje tri različite inačice sinkroniziranog I / O, koji odgovaraju zastavamaO_SYNC , O_DSYNC i O_RSYNC, Trenutno (2.1.130) sve su to sinonimne pod Linuxom. greške
U skladu s
ograničenja