Synopsis
#omfatte
Beskrivelse
Detåben() systemopkald linux kommando bruges til at konvertere et stinavn til en filbeskrivelse (et lille, ikke-negativt heltal til brug i efterfølgende I / O som med Læs, skrive, etc.). Når opkaldet er vellykket, vil den returnerede filbeskrivelse blive den laveste filbeskrivelse, der ikke er åben for processen. Dette opkald opretter en ny åben fil, der ikke deles med en anden proces. (Men delte åbne filer kan opstå viagaffel(2) systemopkald.) Den nye filbeskrivelse er indstillet til at forblive åben over exec-funktioner (sefcntl(2)). Filforskydningen er indstillet til begyndelsen af filen.
Parameteren flag er en afO_RDONLY, O_WRONLY ellerO_RDWR hvilken anmodning åbner filen kun skrivebeskyttet, skrivebeskyttet eller læs / skriv henholdsvis bitvis- eller 'd med nul eller flere af følgende:
O_CREAT
Hvis filen ikke findes, oprettes den. Ejerens (bruger-id) af filen er indstillet til procesens effektive bruger-id. Gruppens ejerskab (gruppe-id) er indstillet enten til processens effektive gruppe-id eller til stamkatalogens gruppe-id (afhængigt af filsystemtype og monteringsindstillinger og moden til moderkataloget, se f.eks. Monteringen muligheder bsdgroups og sysvgroups af ext2 filsystemet, som beskrevet imount(8)).
O_EXCL
Når den bruges sammen medO_CREAT, hvis filen allerede eksisterer, er det en fejl ogåben vil mislykkes. I denne sammenhæng eksisterer der en symbolsk forbindelse, uanset hvor den peger på.O_EXCL er brudt på NFS filsystemer, vil programmer, der er afhængige af det til udførelse af låsningsopgaver, indeholde en løbskondition. Løsningen til at udføre atomfillåsning ved hjælp af et låseblad er at oprette en unik fil på samme fs (fx med værtsnavn og pid), brug link (2) for at danne et link til låsebladet. Hvislink() returnerer 0, låsen er vellykket. Ellers skal du bruge stat(2) på den unikke fil for at kontrollere, om dens link tæller er steget til 2, i hvilket tilfælde låsen også er vellykket.
O_NOCTTY
Hvis stinavn henviser til en terminal enhed --- setty(4) --- det bliver ikke procesens kontrolterminal, selvom processen ikke har en.
O_TRUNC
Hvis filen allerede eksisterer og er en almindelig fil, og den åbne tilstand tillader skrivning (det vil sige O_RDWR eller O_WRONLY), bliver den afkortet til længde 0. Hvis filen er en FIFO- eller terminalenhedsfil, ignoreres O_TRUNC-flagget. Ellers er effekten af O_TRUNC uspecificeret. (På mange Linux versioner vil det blive ignoreret; i andre versioner vil det returnere en fejl.)
O_APPEND
Filen åbnes i append-tilstand. Før hverskrive, er filpegeren placeret i slutningen af filen, som om medlseek. O_APPEND kan føre til ødelagte filer på NFS-filsystemer, hvis mere end én proces tilføjer data til en fil på én gang. Dette skyldes, at NFS ikke understøtter tilføjelse til en fil, så klientkernen skal simulere det, hvilket ikke kan gøres uden løbskondition.
O_NONBLOCK ellerO_NDELAY
Når det er muligt, åbnes filen i ikke-blokeringstilstand. Hverkenåben eller eventuelle efterfølgende operationer på filbeskrivelsen, som returneres, vil få opkaldsprocessen til at vente. For håndtering af FIFO'er (navngivne rør), se ogsåFIFO(4). Denne tilstand behøver ikke at have nogen virkning på andre filer end FIFO'er.
O_SYNC
Filen åbnes for synkron I / O. Nogenskrives på den resulterende filbeskrivelse vil blokere opkaldsprocessen, indtil dataene er blevet fysisk skrevet til den underliggende hardware. Se dog begrænsninger nedenfor.
O_NOFOLLOW
Hvis stinavn er et symbolsk link, så åbner den åbne. Dette er en FreeBSD-udvidelse, som blev tilføjet til Linux i version 2.1.126. Symboliske links i tidligere komponenter i stinavnet vil stadig blive fulgt. Overskrifterne fra glibc 2.0.100 og senere indeholder en definition af dette flag; kerner før 2.1.126 vil ignorere det, hvis det bruges .
O_DIRECTORY
Hvis stinavn er ikke en mappe, fordi den er åben for at mislykkes. Dette flag er Linux-specifikt, og blev tilføjet i kernel version 2.1.126 for at undgå problemer med benægtelse af service, hvisopendir(3) kaldes en FIFO eller tape enhed, men bør ikke bruges uden for implementeringen afopendir.
O_DIRECT
Prøv at minimere cache effekter af I / O til og fra denne fil. Generelt vil dette nedbryde ydeevnen, men det er nyttigt i særlige situationer, f.eks. Når applikationer gør deres eget caching. Fil I / O udføres direkte til / fra brugerrumsbuffere. I / O'en er synkron, dvs. ved afslutningen af Læs(2) ellerskrive(2) systemopkald, data er garanteret at være blevet overført. Overførelsesstørrelser og justering af brugerbuffer og filforskydning skal alle være multipler af filsystemets logiske blokstørrelse.Dette flag understøttes på en række Unix-lignende systemer; Support blev tilføjet under Linux i kernel version 2.4.10.En semantisk lignende grænseflade til blokindretninger er beskrevet irå(8). O_ASYNC Generer et signal (SIGIO som standard, men det kan ændres viafcntl(2)), når input eller output bliver muligt på denne filbeskrivelse. Denne funktion er kun tilgængelig til terminaler, pseudo-terminaler og stikkontakter. Sefcntl(2) for yderligere detaljer. O_LARGEFILE På 32-bit systemer, der understøtter Large Files System, tillader filer, hvis størrelser ikke kan repræsenteres i 31 bits, der skal åbnes. Nogle af disse valgfrie flag kan ændres ved hjælp affcntl efter at filen er åbnet. Argumentet mode Angiver tilladelserne til brug, hvis en ny fil oprettes. Det ændres af procesensumask på den sædvanlige måde: tilladelserne til den oprettede fil er(mode & umask). Bemærk, at denne tilstand kun gælder for fremtidige adgang til den nyoprettede fil; detåbenOpkald, der opretter en skrivebeskyttet fil, kan muligvis returnere en læse / skrive filbeskrivelse. Følgende symbolske konstanter er tilvejebragt mode : S_IRWXU 00700 bruger (fil ejer) har læst, skrevet og udført tilladelse S_IRUSR (S_IREAD) 00400 bruger har læst tilladelse S_IWUSR (S_IWRITE) 00200 bruger har skrive tilladelse S_IXUSR (S_IEXEC) 00100 bruger har fuldbyrdelses tilladelse S_IRWXG 00070-gruppen har læst, skrevet og udført tilladelse S_IRGRP 00040 gruppe har læst tilladelse S_IWGRP 00020 gruppen har skrive tilladelse S_IXGRP 00010 gruppen har fuldbyrdelses tilladelse S_IRWXO 00007 andre har læst, skrevet og udført tilladelse S_IROTH 00004 andre har læst tilladelse S_IWOTH 00002 andre har skrive tilladelse S_IXOTH 00001 andre har fuldbyrdelses tilladelse mode skal angives, nårO_CREAT er i flag , og ignoreres ellers. creat svarer tilåben med flag svarende tilO_CREAT | O_WRONLY | O_TRUNC. TILBAGEVÆRDI åben ogcreat returner den nye filbeskrivelse, eller -1 hvis der opstod en fejl (i hvilket tilfælde errno er indstillet passende). Noter detåben kan åbne enheden specielle filer, mencreat kan ikke oprette dem - brugmknod(2) i stedet. På NFS-filsystemer med UID-mapping aktiveret,åben kan returnere en filbeskrivelse, men f.eks. Læs(2) anmodninger nægtes medEACCES. Dette skyldes, at klienten udføreråben ved at kontrollere tilladelserne, men UID-kortlægning udføres af serveren ved læsnings- og skriveforespørgsler. Hvis filen er nyoprettet, er dens atime, ctime, mtime felter indstillet til den aktuelle tid, og det er også ctime og mtime felterne i overordnet mappe. Ellers, hvis filen er ændret på grund af O_TRUNC-flag, er dens ctime og mtime felter indstillet til den aktuelle tid. EEXIST stinavn eksisterer allerede ogO_CREAT ogO_EXCL blev brugt. EISDIR stinavn henviser til en mappe og den anmodede adgang involverede skrivning (det vil sige,O_WRONLY ellerO_RDWR er indstillet). EACCES Den ønskede adgang til filen er ikke tilladt, eller en af mapper i stinavn Tillad ikke tilladelse til søgning (eksekvering), eller filen eksisterede endnu ikke, og skriveadgang til overordnet mappe er ikke tilladt. ENAMETOOLONG stinavn var for lang. ENOENT O_CREAT er ikke angivet, og den navngivne fil eksisterer ikke. Eller en mappe komponent i stinavn eksisterer ikke eller er en dangling symbolsk link. ENOTDIR En komponent, der bruges som en mappe i stinavn er faktisk ikke en mappe ellerO_DIRECTORYblev specificeret og stinavn var ikke en mappe. ENXIO O_NONBLOCK | O_WRONLY er indstillet, den navngivne fil er en FIFO, og ingen proces har filen åben til læsning. Eller filen er en enhed speciel fil, og der findes ingen tilsvarende enhed. ENODEV stinavn henviser til en speciel enhedens enhed, og der findes ingen tilsvarende enhed. (Dette er en Linux kernel bug - i denne situation skal ENXIO returneres.) EROFS stinavn henviser til en fil på et skrivebeskyttet filsystem, og der blev anmodet om skriveadgang. ETXTBSY stinavn henviser til et eksekverbart billede, der aktuelt udføres, og der blev anmodet om skriveadgang. tandardfarve stinavn punkter uden for dit tilgængelige adresserum. ELOOP Der blev fundet for mange symbolske links i løsningen stinavn , ellerO_NOFOLLOW blev specificeret men stinavn var et symbolsk link. ENOSPC stinavn skulle oprettes, men enheden indeholder stinavn har ikke plads til den nye fil. ENOMEM Utilstrækkelig kernehukommelse var tilgængelig. EMFILE Processen har allerede det maksimale antal filer åbent. ENFILE Grænsen for det samlede antal filer, der er åbnet på systemet, er nået. SVr4, SVID, POSIX, X / ÅBEN, BSD 4.3O_NOFOLLOW ogO_DIRECTORY Flag er Linux-specifikke. Man må muligvis definere_GNU_SOURCE makro for at få deres definitioner. Der er mange infeliciteter i protokollen underliggende NFS, der påvirker blandt andetO_SYNC ogO_NDELAY. POSIX giver mulighed for tre forskellige varianter af synkroniseret I / O, svarende til flageneO_SYNC , O_DSYNC og O_RSYNC. I øjeblikket (2.1.130) er disse alle synonymt under Linux. fejl
Overensstemmende med
Begrænsninger




