Ikasi Linux Command Open

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.