Korte inhoud
#include
Omschrijving
DeOpen() system call linux-opdracht wordt gebruikt om een padnaam naar een bestandsdescriptor te converteren (een klein, niet-negatief geheel getal voor gebruik in de daaropvolgende I / O zoals bij lezen, schrijven, enz.). Wanneer de aanroep succesvol is, zal de geretourneerde bestandsdescriptor de laagste bestanddescriptor zijn die momenteel niet open is voor het proces. Deze oproep maakt een nieuw open bestand aan dat niet met een ander proces wordt gedeeld. (Maar gedeelde open bestanden kunnen via devork(2) systeemaanroep.) De nieuwe bestandsdescriptor is ingesteld om open te blijven in alle exec-functies (ziefcntl(2)). De bestandsverschuiving is ingesteld op het begin van het bestand.
De parameter vlaggen is een vanO_RDONLY, O_WRONLY ofO_RDWR die verzoeken om het bestand alleen-lezen, alleen-lezen of lezen / schrijven, respectievelijk, bitwise- of 'd met nul of meer van het volgende:
O_CREAT
Als het bestand niet bestaat, wordt het gemaakt. De eigenaar (gebruikers-ID) van het bestand wordt ingesteld op de effectieve gebruikers-ID van het proces. Het groepseigendom (groeps-ID) wordt ingesteld op de effectieve groeps-ID van het proces of op de groeps-ID van de bovenliggende map (afhankelijk van het bestandssysteemtype en de mount-opties en de modus van de bovenliggende map, zie bijvoorbeeld de koppeling opties bsdgroups en sysvgroups van het ext2 bestandssysteem, zoals beschreven inberg(8)).
O_EXCL
Wanneer gebruikt metO_CREAT, als het bestand al bestaat, is het een fout en deOpen zal mislukken. In deze context bestaat een symbolische link, ongeacht waar de punten naar verwijzen.O_EXCL is onderbroken op NFS-bestandssystemen, programma's die erop vertrouwen voor het uitvoeren van vergrendelingstaken zullen een raceconditie bevatten. De oplossing voor het uitvoeren van atomic file locking met een lockfile is om een uniek bestand te maken op dezelfde fs (bijv. Met hostname en pid), gebruik link (2) om een link naar de lockfile te maken. Alslink() geeft 0 terug, het slot is succesvol. Anders gebruiken stat(2) over het unieke bestand om te controleren of het aantal verbindingen is toegenomen tot 2, in welk geval het slot ook succesvol is.
O_NOCTTY
Als pathname verwijst naar een terminalapparaat --- zietty(4) --- het wordt niet de controleterminal van het proces, zelfs als het proces er geen heeft.
O_TRUNC
Als het bestand al bestaat en een normaal bestand is en de open modus schrijven toestaat (d.w.z. is O_RDWR of O_WRONLY), wordt het afgekapt naar lengte 0. Als het bestand een FIFO- of terminalapparaatbestand is, wordt de O_TRUNC-vlag genegeerd. Anders is het effect van O_TRUNC niet gespecificeerd. (In veel Linux-versies wordt dit genegeerd, in andere versies wordt een fout geretourneerd.)
O_APPEND
Het bestand wordt geopend in de toevoegmodus. Voor elkschrijven, de bestandsaanwijzer bevindt zich aan het einde van het bestand, alsof metlseek. O_APPEND kan leiden tot corrupte bestanden op NFS-bestandssystemen als meer dan één proces gegevens in één keer aan een bestand toevoegt. Dit komt omdat NFS geen ondersteuning biedt voor een bestand, dus de client-kernel moet het simuleren, wat niet mogelijk is zonder een race-situatie.
O_NONBLOCK ofMET VERTRAGING
Indien mogelijk wordt het bestand geopend in niet-blokkerende modus. Noch deOpen noch een volgende bewerking van de bestandsdescriptor die wordt geretourneerd, zorgt ervoor dat het aanroepproces wacht. Zie ook voor het gebruik van FIFO's (named pipes)fifo(4). Deze modus hoeft geen effect te hebben op andere bestanden dan FIFO's.
O_SYNC
Het bestand wordt geopend voor synchrone I / O. Iederschrijvens in de resulterende bestandsdescriptor blokkeert het aanroepproces totdat de gegevens fysiek naar de onderliggende hardware zijn geschreven. Zie BEPERKINGEN hieronder echter.
O_NOFOLLOW
Als pathname is een symbolische link, dan mislukt het openen. Dit is een FreeBSD-extensie, die in versie 2.1.126 aan Linux is toegevoegd. Symbolische links in eerdere componenten van de padnaam worden nog steeds gevolgd. De headers van glibc 2.0.100 en later bevatten een definitie van deze vlag; kernels vóór 2.1.126 negeren deze indien gebruikt .
O_DIRECTORY
Als pathname is geen map, want de opening mislukt. Deze vlag is Linux-specifiek en is toegevoegd in kernelversie 2.1.126, om denial-of-service-problemen te voorkomen alsopendir(3) wordt aangeroepen op een FIFO- of bandapparaat, maar mag niet worden gebruikt buiten de implementatie vanopendir.
O_DIRECT
Probeer cache-effecten van de I / O naar en van dit bestand te minimaliseren. Over het algemeen zal dit de prestaties verminderen, maar het is nuttig in speciale situaties, zoals wanneer applicaties hun eigen caching uitvoeren. Bestands-I / O wordt rechtstreeks naar / van gebruikersruimtebuffers uitgevoerd. De I / O is synchroon, d.w.z. aan het einde van de lezen(2) ofschrijven(2) systeemoproep, gegevens zijn gegarandeerd te zijn overgedragen. Overdrachtsgroottes en de uitlijning van gebruikersbuffer en bestandsoffset moeten alle veelvouden zijn van de logische blokgrootte van het bestandssysteem.Deze vlag wordt ondersteund op een aantal Unix-achtige systemen; ondersteuning is toegevoegd onder Linux in kernelversie 2.4.10.Een semantisch vergelijkbare interface voor blokapparaten wordt beschreven inrauw(8). O_ASYNC Genereer een signaal (standaard SIGIO, maar dit kan worden gewijzigd viafcntl(2)) wanneer invoer of uitvoer mogelijk wordt op deze bestandsdescriptor. Deze functie is alleen beschikbaar voor terminals, pseudo-terminals en sockets. Zienfcntl(2) voor meer informatie. O_LARGEFILE Op 32-bits systemen die het systeem met grote bestanden ondersteunen, staan bestanden waarvan de grootten niet kunnen worden weergegeven in 31 bits, toe om te worden geopend. Sommige van deze optionele vlaggen kunnen worden gewijzigd met behulp vanfcntl nadat het bestand is geopend. Het argument mode geeft de machtigingen op die moeten worden gebruikt in het geval dat een nieuw bestand wordt gemaakt. Het wordt aangepast door het procesumask op de gebruikelijke manier: de rechten van het gemaakte bestand zijn(modus & ~ umask). Merk op dat deze modus alleen van toepassing is op toekomstige toegangen tot het nieuw gecreëerde bestand; deOpeneen aanroep die een alleen-lezen bestand creëert, kan heel goed een lees / schrijf-bestandsdescriptor retourneren. De volgende symbolische constanten zijn voorzien mode : S_IRWXU 00700 gebruiker (eigenaar van het bestand) heeft lees-, schrijf- en uitvoerrechten S_IRUSR (S_IREAD) 00400 gebruiker heeft leestoestemming S_IWUSR (S_IWRITE) 00200 gebruiker heeft schrijfrechten S_IXUSR (S_IEXEC) 00100 gebruiker heeft execute permissie S_IRWXG 00070-groep heeft lees-, schrijf- en uitvoerrechten S_IRGRP 00040-groep heeft leestoestemming S_IWGRP 00020 groep heeft schrijfrechten S_IXGRP 00010-groep heeft uitvoervergunning S_IRWXO 00007 anderen hebben lees-, schrijf- en uitvoerrechten S_IROTH 00004 anderen hebben leesrechten S_IWOTH 00002 anderen hebben schrijfrechten S_IXOTH 00001 anderen hebben execute permissie mode moet worden opgegeven wanneerO_CREAT is in de vlaggen , en wordt anders genegeerd. creat is gelijk aanOpen met vlaggen gelijk aanO_CREAT | O_WRONLY | O_TRUNC. WINSTWAARDE Open encreat de nieuwe bestandsdescriptor retourneren, of -1 als er een fout is opgetreden (in welk geval errno is correct ingesteld). Let daar opOpen kan speciale apparaatbestanden openen, maarcreat kan ze niet maken - gebruikmknod(2) in plaats daarvan. Op NFS-bestandssystemen met UID-toewijzing ingeschakeld,Open kan een bestandsdescriptor retourneren, maar bijvoorbeeld lezen(2) verzoeken worden geweigerd metEACCES. Dit komt omdat de client presteertOpen door de machtigingen te controleren, maar UID-toewijzing wordt uitgevoerd door de server bij lees- en schrijfverzoeken. Als het bestand opnieuw is gemaakt, worden de velden atime, ctime en mtime op de huidige tijd ingesteld, net als de velden ctime en mtime in de bovenliggende map. Anders, als het bestand wordt gewijzigd vanwege de vlag O_TRUNC, worden de velden ctime en mtime ingesteld op de huidige tijd. EEXIST pathname bestaat al enO_CREAT enO_EXCL waren gebruikt. EISDIR pathname verwijst naar een map en de gevraagde toegang heeft betrekking op schrijven (dat wil zeggen,O_WRONLY ofO_RDWR is ingesteld). EACCES De gevraagde toegang tot het bestand is niet toegestaan, of een van de mappen in pathname toestemming voor zoeken (uitvoeren) niet toegestaan, of het bestand bestond nog niet en schrijftoegang tot de bovenliggende map is niet toegestaan. ENAMETOOLONG pathname was te lang. ENOENT O_CREAT is niet ingesteld en het benoemde bestand bestaat niet. Of, een mapcomponent in pathname bestaat niet of is een bungelende symbolische link. ENOTDIR Een component gebruikt als een directory in pathname is in feite geen map, ofO_DIRECTORYis opgegeven en pathname was geen map. ENXIO O_NONBLOCK | O_WRONLY is ingesteld, het benoemde bestand is een FIFO en er is geen proces om het bestand te lezen. Of het bestand is een speciaal apparaatbestand en er bestaat geen overeenkomstig apparaat. ENODEV pathname verwijst naar een speciaal apparaatbestand en er bestaat geen overeenkomstig apparaat. (Dit is een Linux kernelbug - in deze situatie moet ENXIO geretourneerd worden.) EROFS pathname verwijst naar een bestand op een alleen-lezen bestandssysteem en schrijftoegang is aangevraagd. ETXTBSY pathname verwijst naar een uitvoerbare afbeelding die momenteel wordt uitgevoerd en waarvoor schrijftoegang is aangevraagd. EFAULT pathname punten buiten uw toegankelijke adresruimte. ELOOP Er zijn te veel symbolische koppelingen gevonden bij het oplossen pathname ofO_NOFOLLOW was opgegeven maar pathname was een symbolische link. ENOSPC pathname moest worden gemaakt, maar het apparaat bevatte pathname heeft geen ruimte voor het nieuwe bestand. ENOMEM Onvoldoende kernelgeheugen was beschikbaar. EMFILE Het proces heeft al het maximale aantal bestanden geopend. ENFILE De limiet voor het totale aantal bestanden dat is geopend op het systeem is bereikt. SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW enO_DIRECTORY vlaggen zijn Linux-specifiek. Men moet misschien de_GNU_SOURCE macro om hun definities te krijgen. Er zijn veel ongelukkigheden in het protocol dat ten grondslag ligt aan NFS en beïnvloedt onder andereO_SYNC enMET VERTRAGING. POSIX biedt drie verschillende varianten van gesynchroniseerde I / O, die overeenkomen met de vlaggenO_SYNC , O_DSYNC en O_RSYNC. Momenteel (2.1.130) zijn dit allemaal synoniemen onder Linux. fouten
Voldoen aan
beperkingen




