Phunzirani Linux Command Open

Zosinthasintha

#phlude << A HREF = "fayilo: /usr/include/sys/types.h"> sys / types.h> # kuphatikiza << A HREF = "fayilo: /usr/include/sys/stat.h"> sys / stat.h> # kuphatikiza << A HREF = "fayilo: /usr/include/fcntl.h"> fcntl.h> int open (const char * pathname , int mbendera ); kutseguka (const char * pathname , int mbendera , mode_t mode ); kutenga (const char * pathname , mode_t mode );

Kufotokozera

Lamulo lotseguka () lotsegula linux likugwiritsidwa ntchito kutembenuza mayendedwe kukhala fayilo descriptor (chochepa, chosakhala chotsalira kuti chigwiritsidwe ntchito mu I / O yotsatira monga kuwerenga , kulemba , ndi zina). Pamene kuyitana kuli bwino, fayilo descriptor inabweretsanso kukhala fayilo yotchedwa descriperor osati yotseguka panthawiyi. Kuitana uku kumapanga mafayilo atsopano osatsegulidwa, osagawidwa ndi njira ina iliyonse. (Koma kufalitsa mafayilo otseguka kungabwere kudzera pa foni (2) foni yamakono.) Fayilo yatsopano descriptor imayikidwa kuti ikhale yotseguka pa ntchito (onani fcntl (2)). Fayilo yafayili imayikidwa kumayambiriro kwa fayilo.

Mbendera yamagetsi ndi imodzi mwa O_RDONLY , O_WRONLY kapena O_RDWR yomwe imapempha kutsegula fayilo yowerenga-yokha, kulemba-yokha kapena kuwerenga / kulemba, motsatira, bitwise- kapena 'd ndi zero kapena zotsatirazi:

O_CREAT

Ngati fayilo silidalipo idzapangidwa. Mwini (wosuta ID) wa fayilo akuyikidwa kwa ID yogwiritsira ntchito yogwiritsira ntchito. Gulu la eni ake (gulu la ID) limayikidwa ku ID yofunikira ya ndondomekoyo kapena ku chidziwitso cha gulu la zolembera za makolo (malingana ndi mtundu wa fayilo ndikusankha zosankha, ndi njira ya makolo, onani, zosankha za bsdgroups ndi magulu a maofesi a ext2, monga akufotokozedwa m'phiri (8)).

O_EXCL

Pogwiritsidwa ntchito ndi O_CREAT , ngati fayilo ilipo kale ndizolakwika ndipo kutseguka kudzalephera. M'nkhaniyi, mgwirizano wophiphiritsira umakhalapo, mosasamala kanthu komwe akulozera. O_EXCL yathyoledwa pa machitidwe a fayilo a NFS , mapulogalamu omwe amadalira pazochita ntchito zotsekedwa zidzakhala ndi mpikisanowu. Njira yothetsera kutsekemera mafayilo otsekemera pogwiritsa ntchito lockfile ndiyo kupanga fayilo yapadera pa fs yomweyo (mwachitsanzo, kuphatikizapo dzina la alendo komanso pid), gwiritsani ntchito chiyanjano (2) kuti ukhale womangiriza ku lockfile. Ngati chiyanjano () chibwezeretsa 0, lololo liri bwino. Popanda kutero, gwiritsani ntchito stat (2) pa fayilo yapadera kuti muwone ngati chiwerengero chake chikuwonjezeka kufika pa 2, pomwepo chotsekerako chimapindulanso.

O_NOCTTY

Ngati njirayo imatchulidwa ku chipangizo chotengera chonchi --- onani tty (4) - iyo siidzakhala yothetsera njira ngakhale kuti ndondomekoyi ilibe.

O_TRUNC

Ngati fayilo ilipo kale ndipo imakhala yojambula nthawi zonse ndipo mawonekedwe otseguka amalola kulembedwa (ie, ndi O_RDWR kapena O_WRONLY) izo zidzasinthidwa mpaka kutalika 0. Ngati fayilo ndi fayilo ya FIFO kapena foni, fayilo ya O_TRUNC imanyalanyazidwa. Apo ayi, zotsatira za O_TRUNC sizidziwika. ( Mabaibulo ambiri a Linux adzanyalanyazidwa; pamatembenuzidwe ena, idzabwezera cholakwika.)

O_APPEND

Fayilo imatsegulidwa mu njira yowonjezera. Musanalembere aliyense kulemba , fayilo ya fayilo ili pamapeto pa fayilo, ngati ndi lseek . O_APPEND ikhoza kutsogolera maofesi osokonezeka pa mafayilo a mafayili a NFS ngati zochuluka zowonjezeretsa deta ku fayilo kamodzi. Izi zili choncho chifukwa NFS sichikuthandizira kulumikiza ku fayilo, kotero kernel kasitomala amayenera kuimiritsa, yomwe siingatheke popanda mpikisanowu.

O_NONBLOCK kapena O_NDELAY

Ngati n'kotheka, fayilo imatsegulidwa m'njira yosatsekera. Palibe ntchito yotseguka kapena ntchito yotsatira pa fayilo yofotokozera yomwe imabweretsedwa idzayambitsa ndondomeko yoitanira. Pogwiritsa ntchito FIFOs (yotchedwa mapaipi), wonaninso ma fifo (4). Njirayi sayenera kukhala ndi zotsatira pa mafayilo kupatula FIFOs.

O_SYNC

Fayilo imatsegulidwa kwa ma synchronous I / O. Zonse zolembera pa pulani yofotokozera descriptor zidzatseka njira yoitanira mpaka deta italembedwa ku hardware yoyambira. Onani RESTRICTIONS pansi, ngakhale.

O_NOFOLLOW

Ngati mayina ndi mawonekedwe ophiphiritsa, ndiye kuti kutseguka sikulephera. Izi ndizowonjezera kwa FreeBSD, zomwe zinawonjezeredwa ku Linux mu version 2.1.126. Zotsatira zamakono za zigawo zoyambirira za pathname zidzatsatiridwabe. Mutu wa glibc 2.0.100 ndipo kenako umakhala ndi tanthauzo la mbendera iyi; maso pamaso pa 2.1.126 amanyalanyaza ngati agwiritsidwa ntchito .

O_DIRECTORY

Ngati mayina siwongolera, yambani kutsegula. Mbendera iyi ndi ya Linux, ndipo inayikidwa mu kernel version 2.1.126, kuti mupewe mavuto otsutsa ngati ntchito (3) idatchulidwa pa fifa kapena fayilo ya tepi, koma isagwiritsidwe ntchito kunja kwa kukhazikitsidwa kwa opendir .

O_DIRECT

Yesetsani kuchepetsa zotsatira zachinsinsi za I / O kupita ndi kuchokera pa fayiloyi. Kawirikawiri izi zidzasokoneza ntchito, koma zimathandiza panthawi yapadera, monga pamene ntchito ikusekerera. Foni I / O yapangidwa mwachindunji ku / kuchokera ku malo ogulitsa malo. O / O ndi ofanana, mwachitsanzo, pamapeto a kuwerenga (2) kapena kulemba (2) maitanidwe, deta yatsimikiziridwa kuti yasamutsidwa. Sungani kukula kwake, ndi kuikidwa kwa bukhu la osuta ndi kuyika zolakwika zonse zikhale zowonjezera za kukula kwakukulu kwa mawonekedwe a fayilo.
Mbendera iyi imathandizidwa pa machitidwe ambiri a Unix; chithandizo chinapangidwira pansi pa Linux mu kernel version 2.4.10.
Chida chofanana chomwe chimagwiritsira ntchito zipangizo zamatabwa chimafotokozedwa muzithunzithunzi (8).

O_ASYNC

Pangani chizindikiro (SIGIO mwachisawawa, koma izi zingasinthidwe kudzera fcntl (2)) pamene zolembera kapena zotulutsidwa zikutheka pa fayilo yofotokoza. Mbali iyi imapezeka kokha kwa mapumapeto, mapeto osokoneza, ndi zitsulo. Onani fcntl (2) kuti mudziwe zambiri.

O_LARGEFILE

Pa ma-32-bit machitidwe omwe amawathandiza Mawindo Akuluakulu, alola maelo omwe kukula kwake sikungayimiridwe mu makina 31 kuti atsegulidwe.

Zina mwazigawenga zosankhidwazi zingasinthidwe pogwiritsa ntchito fcntl pambuyo pake fayilo itsegulidwa.

Njira yotsutsana imatanthauzira zilolezo zomwe zingagwiritsidwe ntchito ngati fayilo yatsopano yakhazikitsidwa. Amasinthidwa ndi umask ya njirayo mwachizolowezi: zilolezo za mafayilo opangidwa ndi (machitidwe & ~ umask) . Dziwani kuti mafashoniwa amangogwiritsidwa ntchito pazowonjezera zamtsogolo za fayilo yatsopano; Kuitana koyambira komwe kumapanga fayilo yowerengeka kungabweretsere fomu yowerenga / kulemba mafayilo.

Zotsatira zophiphiritsa zotsatirazi zimaperekedwa mwa njira :

S_IRWXU

Mtumiki wa 00700 (fayilo mwini) wawerenga, alemba ndikupereka chilolezo

S_IRUSR (S_IREAD)

Mtumiki wa 00400 wawerenga chilolezo

S_IWUSR (S_IWRITE)

Mtumiki wa 00200 ali ndi chilolezo cha kulemba

S_IXUSR (S_IEXEC)

Mtumiki wa 00100 apereka chilolezo

S_IRWXG

00070 gulu lawerengapo, lemba ndikupereka chilolezo

S_IRGRP

00040 gulu lawerengera chilolezo

S_IWGRP

00020 gulu liri ndi chilolezo cha kulemba

S_IXGRP

00010 gulu likupereka chilolezo

S_IRWXO

00007 ena awerengapo, alemba ndikupereka chilolezo

S_IROTH

00004 ena awerenga chilolezo

S_IWOWO

00002 ena ali ndi chilolezo cholemba

S_IXOTH

00001 ena apereka chilolezo

Makhalidwe ayenera kufotokozedwa pamene O_CREAT ali mu benderagi , ndipo amanyalanyazidwa mosiyana.

kulenga ndikofanana ndi kutsegula ndi mbendera zomwe zikufanana ndi O_CREAT | O_WRONLY | O_TRUNC .

Bwererani PALANI

kutseguka ndi kulenga kubwezeretsa fayilo yofotokoza descriptor, kapena -1 ngati cholakwika chinachitika (mulimonsemo, errno yakonzedwa bwino). Onani kuti kutseguka kungatsegule mafayilo apadera, koma chilengedwe sichingawapange - gwiritsani ntchito mknod (2) m'malo mwake.

Pa ma fayilo a NFS omwe ali ndi mapu a UID, otseguka akhoza kubwezeretsa kufotokozera mafayilo koma mwachitsanzo (2) zopempha zimatsutsidwa ndi EACCES . Ichi ndi chifukwa chakuti kasitomala amatsegula pofufuza zilolezo, koma mapu a UID amachitidwa ndi seva pamapemphero owerenga ndi kulemba.

Ngati fayilo yatsopano yakhazikitsidwa, yakememe, ctime, masewera amakafika nthawi yeniyeni, ndipo ndi nthawi yothandizira komanso mtime ya mndandanda wa makolo. Apo ayi, ngati fayilo isinthidwa chifukwa cha mbendera ya O_TRUNC, nthawi yake ndi minda ya mtime yayikidwiratu nthawi yomwe ilipo.

Zolakwika

EEXIST

Njirayo ilipo kale ndipo O_CREAT ndi O_EXCL zinagwiritsidwa ntchito.

EISDIR

njirayo imatanthauzira ku bukhu ndi zolembera zopempha zomwe zikuphatikizidwa (ndiko, O_WRONLY kapena O_RDWR yakhazikitsidwa).

EACCES

Kufikira kupempha kwa fayilo sikuloledwa, kapena imodzi mwa mauthenga pa mayina sanalole kufufuza (kutulutsa) chilolezo, kapena fayilo silinapezeke ndi kulemba kulandila kwa cholembera cha makolo sichiloledwa.

ENAMETOOLONG

njirayo inali yaitali kwambiri.

YAM'MBUYO

O_CREAT sichikhazikitsidwa ndipo fayilo yotchulidwa silikupezeka. Kapena, chigawo cholembera pa pathname palibe kapena chikugwirizanitsa chophiphiritsa.

ENOTDIR

Chigawo chogwiritsiridwa ntchito monga bukhu mu pathname si, kwenikweni, cholembera, kapena O_DIRECTORY chinanenedwa ndipo njira yowonjezera sinali yowonjezera.

ENXIO

O_NONBLOCK | O_WRONLY yasankhidwa, fayilo yotchulidwa ndi FIFO ndipo palibe njira yomwe fayilo imatsegulira kuwerenga. Kapena, fayiloyi ndi fayilo yapadera ya chipangizo ndipo palibe chipangizo chogwirizana nacho chilipo.

ENODEV

njirayo imatanthawuza fayilo yapadela yapadera ndipo palibe chipangizo chogwirizana chomwe chilipo. (Izi ndi matenda a Linux kernel - mu nthawi iyi ENXIO iyenera kubwezedwa.)

EROFS

njirayo imatanthawuza fayilo pa tsamba lokha lowerengedwa ndikulemba mwayi wopemphedwa.

ETXTBSY

pathname imatanthawuza chithunzi chochitidwa chomwe chikuchitidwa ndi kulemba mwayi wofikira.

EFAULT

mayina a path path kunja kwa malo anu ochezera adiresi.

KUCHITA

Zowonongeka zambiri zowonongeka zomwe zinakumana ndi kuthetsa njira , kapena O_NOFOLLOW zinatchulidwa koma dzina la mayendedwe linali chizindikiro chophiphiritsira.

ENOSPC

njirayo iyenera kulengedwa koma chipangizo chomwe chiri ndi pathname sichikhala ndi malo a fayilo yatsopano.

ENOMEM

Chikumbutso chosakwanira cha kernel chinalipo.

EMFILE

Ndondomekoyi ili ndi nambala yochuluka ya mafayilo otseguka.

ENFILE

Malire pa chiwerengero cha mafayilo otsegulidwa pa dongosolo afika.

Kugwirizana nazo

SVr4, SVID, POSIX, X / OPER, BSD 4.3 Zizindikiro za O_NOFOLLOW ndi O_DIRECTORY ndi Linux- zenizeni. Mmodzi angafunike kufotokoza _GNU_SOURCE macro kuti atenge tanthauzo lake.

Zoletsa

Pali zinthu zambiri zopanda pake zomwe zimayendera NFS, zomwe zimakhudza ena O_SYNC ndi O_NDELAY .

POSIX imapereka mitundu itatu yosiyana ya O / O yovomerezeka , yofanana ndi mbendera za O_SYNC , O_DSYNC ndi O_RSYNC . Pakali pano (2.1.130) izi zonse ndizofanana ndi Linux.