Laburpena
#include << A HREF = "file: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "file: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "file: /usr/include/fcntl.h"> fcntl.h> int ireki (const char * pathname , int banderak ); int irekia (const char * pathname , int banderak , mode_t modua ); int creat (const char * pathname, modua_t modua );deskribapena
Sistema irekiko () sistema linux komandoa erabiltzen da bide-izen bat fitxategi deskribatzaile bihurtzeko (zenbaki txiki bat, ez negatiboa, ondorengo I / O erabiltzeko irakurri , idatzi , eta abar). Deia arrakastatsua denean, fitxategi- deskriptorea wil izango da prozesuan irekita dagoen fitxategi-deskriptore txikiena izan ezik. Dei honek fitxategi berri bat irekitzen du, ez beste prozesu batekin partekatuta. (Baina fitxategiak irekita partekatuak sorginaren bidez (2) sistema deitzen zaizkio.) Fitxategi deskriptore berria irekita egongo da exekuturen funtzio guztietan (ikus fcntl (2)). Fitxategiaren desplazamendua fitxategiaren hasierara doitzen da.
Parametroen banderak O_RDONLY , O_WRONLY edo O_RDWR bat da. Fitxategi irakurtzeko soilik, idazteko soilik edo irakurri / idatzi irekita, hurrenez hurren bitarra- edo 'd zero edo gehiagoren artean honako hau da:
O_CREAT
Fitxategia ez badago, sortuko da. Fitxategiaren jabea (erabiltzailearen IDa) prozesuaren erabiltzaile-IDa da. Taldearen jabetza (taldearen IDa) prozesuko talde-talde eraginkorrarekin edo gurasoaren direktorioaren taldearen IDarekin (fitxategi-mota motaren eta muntatze-aukeren arabera eta gurasoen direktorioa modua, ikus, adibidez, muntaia Aukerak bsdgroups eta sysvgroups ext2 fitxategientzako sistema, mount (8) deskribatzen den moduan).
O_EXCL
O_CREAT- rekin erabiltzen denean, badago dagoeneko existitzen den fitxategia errore bat da eta irekia huts egingo du. Testuinguru horretan, lotura sinbolikoa dago, bere puntuak non dauden kontuan hartu gabe. O_EXCL NFS fitxategi sistemetan hautsita dago, blokeo-egintzak gauzatzeko oinarritzen diren programek lasterketa-baldintza izango dute. Blokeo fitxategiaren bidez blokeo atomikoaren blokeoa egiteko irtenbidea fs bereko fitxategi bakar bat sortzea da (adibidez, ostalari izena eta pid), erabili esteka (2) blokeo fitxategirako esteka bat egiteko. Lotura () 0 itzultzen badu, blokeoa arrakastatsua izango da. Bestela, erabili stat (2) fitxategi bakarrean esteka egiaztatzeko 2 puntutara gehitzeko, kasu horretan blokeoa ere arrakastatsua izango da.
O_NOCTTY
Bide- izena terminal gailu bati egiten badiozu --- ikus tty (4) --- ez da prozesuaren kontrol-terminal bihurtuko, prozesuak ez badu ere.
O_TRUNC
Fitxategia dagoeneko badago eta fitxategi arrunta da eta irekitako modua idazteko aukera ematen du (hau da, O_RDWR edo O_WRONLY) luzera 0 izango da trunkatuta. Fitxategia FIFO edo terminal gailu fitxategia bada, O_TRUNC bandera ez da kontuan hartuko. Bestela, O_TRUNCren eragina zehaztu gabe dago. (Linux bertsio askotan ezikusi egingo da; beste bertsioetan, errorea emango du).
O_APPEND
Fitxategia itxita dagoen eran irekitzen da. Idatzi aurretik, fitxategi-erakuslea fitxategiaren amaieran kokatzen da, lseek bezala balitz bezala. O_APPEND NFS fitxategi sistemetan hondatutako fitxategiak sor daitezke prozesu bat baino gehiagotan, aldi berean, datuak aldi berean fitxategi batera. Honek NFS-k ez du fitxategi bati eransteko onartzen, beraz, bezeroaren kernelak simulatu egin behar du, lasterketa baldintzarik gabe egin daitekeena.
O_NONBLOCK edo O_NDELAY
Ahal izanez gero, fitxategia blokea ez den moduan irekiko da. Ez da itzuli den deskriptore fitxategi irekirik eta ez inolako eragiketarik itxaroten duen deia prozesua. FIFO (izeneko hodiak) maneiatzeko, ikusi ere fifo (4). Modu honek ez du inolako eraginik FIFOren beste fitxategietan.
O_SYNC
Fitxategia I / O sinkronoetarako irekitzen da. Edozein idazleek fitxategiaren deskriptoreak dei-prozesua blokeatuko du, datuek hardware azpiko hardwarean idatzita egon arte. Ikusi RESTRICTIONS behean, ordea.
O_NOFOLLOW
Bide-izena lotura sinbolikoa bada, irekia huts egiten du. FreeBSD luzapena da, Linux 2.1.126 bertsioan gehituta. Bide-izenaren aurreko osagaien lotura sinbolikoak ere jarraituko dira. Glibc 2.0.100 goiburuak eta geroagoak bandera honen definizioa hartzen dute; 2.1.126 baino lehenagoko kernelak erabiliko ez badute .
O_DIRECTORY
Bide-izena ez bada direktorio bat, huts egin du irekita. Bandera hori Linux-eko espezifikoa da, eta 2.1.126 kernel bertsioan gehitu da, ukatze-zerbitzu-arazoak saihesteko opendir (3) FIFO edo zinta gailu bati deitzen bazaio , baina ez da erabili opendir-en exekuziorako .
O_DIRECT
Saiatu fitxategiaren cache-efektuak eta / edo fitxategi horretatik minimizatu. Oro har, errendimendua kaltetu egingo da, baina oso erabilgarria da egoera berezietan, adibidez, aplikazioek euren cacheak egiten dituztenean. I / O fitxategia zuzenean / erabiltzailearen bufferretatik zuzenean egiten da. I / O sinkronoa da, hau da, irakurri (2) edo idatzi (2) sistemaren deialdiaren amaieran, transferitutako datuak bermatzen dira. Transferentzia-tamainak eta erabiltzailearen bufferrak eta fitxategiak konpentsatzeko lerrokadurak fitxategi-sistema bloke logikoaren tamainak izan behar dituzte.
Bandera bateragarria da Unix sistemarekin; Linux kernel bertsioan 2.4.10 bertsioan laguntza gehitu zen.
Bloke gailuetarako interfaze semantikoki antzekoa gordin (8) deskribatzen da.
O_ASYNC
Sortu seinale bat (SIGIO lehenespenez, hau da fcntl (2) bidez alda daiteke) sarrera edo irteera posible bihurtzen da fitxategi-deskriptore honetan. Funtzio hau terminaletarako, pseudo-terminaletarako eta konektoreetarako soilik dago erabilgarri. Ikus fcntl (2) xehetasun gehiago lortzeko.
O_LARGEFILE
Fitxategi Handien Sistema onartzen duten 32 biteko sistemetan, onartzen diren fitxategiak 31 biteko tamaina ez da irekiko.
Banderen aukerako batzuk aldatu egin daitezke fcntl- rekin fitxategian ireki ondoren.
Argumentu modua fitxategi berri bat sortzen den kasuetan erabiltzeko baimenak zehazten ditu. Prozesuaren umaskaz aldatzen da ohiko moduan: sortutako fitxategiaren baimenak (modua eta ~ umask) dira . Kontuan izan modu hau berriki sortutako fitxategien etorkizuneko sarbideei soilik aplikatzen zaien; irakurtzeko soilik den fitxategia sortzen duen deiak irekita eta irakurketa / idazketa fitxategi deskribatzailea itzuli dezake.
Honako konstante sinbolikoak moduaren arabera ematen dira:
S_IRWXU
00700 erabiltzaileari (fitxategi-jabea) irakurri, idatzi eta exekutatu baimena
S_IRUSR (S_IREAD)
00400 erabiltzailek irakurri dute baimena
S_IWUSR (S_IWRITE)
00200 erabiltzaileak idazteko baimena du
S_IXUSR (S_IEXEC)
00100 erabiltzaileak baimena exekutatu du
S_IRWXG
00070 taldek irakurri, idatzi eta exekutatu baimena
S_IRGRP
00040 taldek irakurri dute baimena
S_IWGRP
00020 taldeek idazteko baimena dute
S_IXGRP
00010 taldeak baimena exekutatu du
S_IRWXO
Beste batzuk 00007 irakurri, idatzi eta exekutatu baimena
S_IROTH
00004 besteek irakurri dute baimena
S_IWOTH
Beste 00002 idazteko baimena dute
S_IXOTH
Beste batzuk 00001 exekutatu dute baimena
Modua zehaztu behar da O_CREAT banderak dagoenean, eta bestela ez zaio jaramonik egingo.
Sortzailea O_CREAT | O_WRONLY | O_TRUNC berdina da.
RETURN VALUE
Ireki eta sortutako fitxategiaren deskriptore berria itzultzeko, edo -1 errore bat gertatu bada (kasu horretan, errno ezarrita dago). Kontuan izan irekia duten gailuak fitxategi bereziak ireki ditzakezula, baina sortzaileak ezin ditu sortu - erabili mknod (2) horren ordez.
NFS fitxategi sistemetan UID mapak gaituta duenez , irekiak fitxategi deskriptorea itzul diezaiokezu, adibidez, irakurri (2) eskaerak EACCESekin ukatzen dira. Honek bezeroak irekitzen ditu baimenak egiaztatuz, baina zerbitzariaren UID mapak irakurketa eta idazketa eskaeren gainean egiten du.
Fitxategia berriki sortua bada, atime, ctime, mtime eremuak une honetan ezarriko dira, eta beraz, gurasoaren direktorioaren ctime eta mtime eremuak dira. Bestela, fitxategia O_TRUNC bandera delako aldatzen bada, bere ctime eta mtime eremuak une honetan ezarriko dira.
Akatsak
EEXIST
bidea dagoeneko existitzen da eta O_CREAT eta O_EXCL erabiltzen dira.
EISDIR
bide- izena direktorioa eta eskatutako sarbidean idatzitako idazketa (hau da, O_WRONLY edo O_RDWR ezarri da) aipatzen da.
EACCES
Fitxategirako eskatutako sarbidea ez da onartzen, edo bide- izeneko direktorio bat ez da bilatu (exekutatu) baimena baimenik izan, edo fitxategia oraindik ez da existitzen eta guraso direktorioa sarbidea idazteko baimena ez da onartzen.
ENAMETOOLONG
bidea luzeegia zen.
ENOENT
O_CREAT ez dago ezarrita eta izeneko fitxategia ez da existitzen. Edo, bide-izeneko direktorio-osagaia ez da existitzen edo lotura sinboliko zintzilikaria da.
ENOTDIR
Bide-izeneko direktorio gisa erabiltzen den osagaia ez da, hain zuzen ere, direktorio bat, edo O_DIRECTORY zehaztu zen eta bidea ez zen direktorio bat.
ENXIO
O_NONBLOCK | O_WRONLY ezarri da, izeneko fitxategia FIFO da eta prozesuak ez du fitxategia irekita irakurtzeko. Edo, fitxategia gailu berezia da eta dagokion gailua ez dago.
ENODEV
pathname gailu bateko fitxategi berezi bati dagokio eta dagokion gailua ez dago. (Hau da Linux kernelaren akatsa: egoera horretan, ENXIO itzuli behar da).
EROFS
pathname fitxategi irakurgarriko fitxategi sisteman aipatzen da eta idazteko sarbidea eskatu da.
ETXTBSY
pathname exekutatzen ari den irudi exekutagarri bati egiten zaio erreferentzia, eta idazteko sarbidea eskatu da.
EFAULT
Zure helbidearen helbide sarbidetik kanpoko helbideak.
ELOOP
Lotura sinboliko ugari topatu ziren bide- izenaren ebazpena, edo O_NOFOLLOW zehaztu zen baina bide- izena lotura sinbolikoa izan zen.
ENOSPC
bide- izena sortu behar zen baina bide-izena duen gailuak ez du gelaxka berririk.
ENOMEM
Ez da nahikoa kernel memoria erabilgarri.
EMFILE
Prozesuak fitxategiak gehienez ireki ditu.
ENFILE
Sisteman irekitako fitxategien kopuruaren muga iritsi da.
Konformazioa
SVr4, SVID, POSIX, X / OPEN, BSD 4.3 O_NOFOLLOW eta O_DIRECTORY banderak Linux-a zehazten dira. Momentu bat izan daiteke _GNU_SOURCE makroa definitzeko.
Murrizketak
NFS azpian dagoen protokoloan hutsuneak daude , besteak beste O_SYNC eta O_NDELAY .
POSIXek I / O sinkronizatuaren hiru aldaera desberdinak eskaintzen ditu, O_SYNC , O_DSYNC eta O_RSYNC banderak dagokienez . Gaur egun (2.1.130) hauek guztiak Linuxen sinonimoak dira.