Pagkat-on sa Linux Command Open

Sinopsis

#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 open (const char * pathname , int flags ); int open (const char * pathname , int flags , mode_t mode ); int creat (const char * pathname , mode_t mode );

Deskripsiyon

Ang bukas () system call linux command gigamit sa pag-convert sa pathname ngadto sa usa ka file descriptor (usa ka gamay, dili negatibo nga integer nga gamiton sa sunod nga I / O sama sa pagbasa , pagsulat , ug uban pa). Sa diha nga ang tawag malampuson, ang file descriptor mibalik nga wil mao ang labing ubos nga descriptor sa file nga dili karon bukas alang sa proseso. Kini nga tawag nagmugna og usa ka bag-ong bukas nga file, dili ipaambit sa uban pang proseso. (Apan ang gipaambit nga bukas nga mga file mahimo nga moabut pinaagi sa sistema sa fork (2).) Ang bag-o nga file descriptor gitakda nga magpabilin nga bukas sa mga function sa exec (tan-awa ang fcntl (2)). Ang file nga offset gibutang sa sinugdanan sa file.

Ang parameter flags usa sa O_RDONLY , O_WRONLY o O_RDWR nga naghangyo sa pag-abli sa file nga read-only, write-only o pagbasa / pagsulat, sa tinagsa, bitwise- o d uban sa zero o labaw pa sa mosunod:

O_CREAT

Kung ang file wala maglungtad kini pagabuhaton. Ang tag-iya (user ID) sa file gitakda sa epektibong user ID sa proseso. Ang tag-iya sa grupo (grupo ID) gitakda ngadto sa epektibong grupo ID sa proseso o sa grupo ID sa ginikanan nga direktoryo (depende sa klase sa filesystem ug mga bukas nga mga kapilian, ug ang pamaagi sa direktoryo sa ginikanan, tan-awa, eg ang bukid mga kapilian nga bsdgroup ug mga sysvgroup sa mga ext2 filesystem, nga gihulagway sa mount (8)).

O_EXCL

Kung gamiton uban sa O_CREAT , kung ang file na naglungtad kini usa ka sayop ug ang bukas nga mapakyas. Niini nga konteksto, adunay usa ka simbolo nga sumpay, walay sapayan kung diin ang mga punto niini. Ang O_EXCL gibuak sa mga sistema sa file sa NFS , ang mga programa nga nagsalig niini alang sa pagpahigayon sa mga pag-lock sa mga buluhaton adunay usa ka kondisyon sa lumba. Ang solusyon sa paghimo sa pag-lock sa atomic file gamit ang lockfile mao ang paghimo sa usa ka talagsaong file sa sama nga fs (pananglitan, i-incorporate ang hostname ug pid), gamit ang link (2) aron makahimo og usa ka link sa lockfile. Kung ang link () mobalik 0, ang kandado malampuson. Kay kon dili, gamiton ang stat (2) sa talagsaong file aron pagsusi kung ang numero sa link niini misaka ngadto sa 2, ug kung ingon niini ang kandado usab malampuson.

O_NOCTTY

Kung ang agianan sa agianan nagtumong sa usa ka terminal device --- tan-awa ang tty (4) --- dili kini mahimong proseso sa pagkontrol sa terminal bisan kung ang proseso walay usa.

O_TRUNC

Kon ang file anaa na ug kini usa ka regular nga file ug ang open mode nagtugot sa pagsulat (ie, mao ang O_RDWR o O_WRONLY) kini maputol ngadto sa gitas-on nga 0. Kung ang file usa ka FIFO o terminal device file, ang O_TRUNC flag dili ibalewala. Kay kon dili, ang epekto sa O_TRUNC dili matino. (Sa daghang mga bersyon sa Linux dili kini ibalewala; sa ubang mga bersyon, kini mobalik sa kasaypanan.)

O_APPEND

Ang file mabuksan sa append mode. Sa wala pa magsulat , ang file nga pointer nahimutangan sa katapusan sa file, ingon nga adunay lseek . Ang O_APPEND mahimong mosangpot ngadto sa dunot nga mga file sa mga sistema sa file sa NFS kung labaw pa sa usa ka proseso ang nagdugang sa datos sa usa ka file sa usa ka higayon. Kini tungod kay ang NFS wala nagsuporta sa pag-append sa usa ka file, busa ang kernel sa kliyente kinahanglang mag-ilog niini, nga dili mahimo nga walay kondisyon sa lumba.

O_NONBLOCK o O_NDELAY

Kon posible, mabuksan ang file sa non-blocking mode. Ni ang abli o bisan unsang mga operasyon sa file descriptor nga ibalik maghimo sa proseso sa calling nga maghulat. Alang sa pagdumala sa mga FIFO (gitawag nga mga tubo), tan-awa usab ang fifo (4). Kini nga mode kinahanglan walay epekto sa mga file gawas sa mga FIFO.

O_SYNC

Ang file mabuksan alang sa kasabay nga I / O. Ang bisan unsa nga isulat s sa resulta file descriptor mag-block sa proseso sa pagtawag hangtud nga ang datos gisulat sa pisikal ngadto sa nagpahiling hardware. Tan-awa ang MGA KINABUHI sa ubos bisan pa.

O_NOFOLLOW

Kon ang agianan sa agianan usa ka simbolo nga sumpay, nan ang bukas mapakyas. Kini usa ka extension sa FreeBSD, nga gidugang sa Linux sa bersyon 2.1.126. Ang simbolikong mga sumpay sa mga naunang sangkap sa dalanon pagasundan gihapon. Ang mga ulohan gikan sa glibc 2.0.100 ug sa ulahi naglakip sa kahulugan niini nga bandila; Ang mga liso sa wala pa 2.1.126 dili ibalewala kung gigamit .

O_DIRECTORY

Kon ang agianan sa agianan dili usa ka direktoryo, ang hinungdan sa pagkabukas sa pagkapakyas. Kini nga bandila usa ka Linux nga piho, ug gidugang sa kernel version 2.1.126, aron malikayan ang mga problema sa pagsumbong kung ang opendir (3) gitawag sa usa ka FIFO o tape device, apan dili angay gamiton sa gawas sa pagpatuman sa opendir .

O_DIRECT

Sulayi ang pag-ubos sa mga epekto sa cache sa I / O ngadto ug gikan niini nga file. Sa kinatibuk-an kini makapaubos sa pasundayag, apan kini mapuslanon sa mga espesyal nga mga sitwasyon, sama sa kung ang mga aplikasyon maghimo sa ilang kaugalingong caching. Ang file I / O gihimo direkta sa / gikan sa mga buffer sa luna sa tiggamit. Ang I / O kasumpay, nga mao, sa pagkompleto sa basahon (2) o pagsulat (2) sistema nga tawag, ang kasiguraduhan nga data gibalhin. Pagbalhin sa gidak-on, ug ang pag-align sa user buffer ug file nga offset kinahanglan tanan nga mga multiples sa logical block size sa file system.
Gipaluyohan kini nga bandila sa pipila ka mga sistema nga sama sa Unix; Ang suporta gipadugang ubos sa Linux sa kernel version 2.4.10.
Ang susama nga sama nga interface alang sa mga bloke device gihulagway sa hilaw (8).

O_ASYNC

Pagmugna og usa ka signal (SIGIO sa default, apan kini mahimong usbon pinaagi sa fcntl (2)) kung ang input o output mahimong mahimo niining file descriptor. Kini nga bahin alang lamang sa mga terminal, pseudo-terminal, ug socket. Tan-awa ang fcntl (2) alang sa dugang mga detalye.

O_LARGEFILE

Sa 32-bit nga mga sistema nga nagsuportar sa Large Files System, tugoti ang mga file nga ang mga gidak-on dili mahulagway sa 31 ka mga bit nga pagabuksan.

Ang uban niining mga opsyonal nga mga bandila mahimong usbon gamit ang fcntl human mabuksan ang file.

Ang argumento nga paagi nagtino sa mga permiso nga gamiton kung ang usa ka bag-ong file gimugna. Kini giusab sa umask sa proseso sa kasagaran nga paagi: ang mga permiso sa gitukod nga file mao ang (mode & ~ umask) . Hinumdomi nga kini nga paagi magamit lamang sa umaabot nga mga pag-access sa bag-ong gimugna nga file; ang bukas nga tawag nga nagmugna og usa ka read-only nga file mahimong ibalik ang usa ka read / write file descriptor.

Ang mosunod nga simbolikong mga pagkaporma gihatag alang sa paagi :

Angkon

Ang 00700 nga user (tag-iya sa file) nagbasa, nagsulat ug nagpatuman sa pagtugot

S_IRUSR (S_IREAD)

Gitugotan sa 00400 nga user ang pagbasa

SIRIUS (SIRIYA)

Ang 00200 nga gumagamit adunay pagtugot

Siyentipiko (S_IEXEC)

Gisuspetsahan ang 00100 nga tiggamit

S_IRWXG

00070 nga grupo nagbasa, nagsulat ug nagpatuman sa pagtugot

S_IRGRP

Ang 00040 nga grupo nagbasa sa pagtugot

S_IWGRP

Ang grupo sa 00020 adunay pagtugot

S_IXGRP

Gidili ang grupo nga 00010

S_IRWXO

00007 ang uban nagbasa, nagsulat ug nagpatuman sa pagtugot

PAGHULAGWAY

00004 ang uban nagbasa sa pagtugot

GUSTO

00002 ang uban adunay pagtugot

Okay

00001 ang uban adunay pagtugot nga ipatuman

mode kinahanglan nga matino sa diha nga ang O_CREAT anaa sa bandila , ug gibalewala sa laing paagi.

creat mao katumbas sa pagbukas sa mga bandila nga katumbas sa O_CREAT | O_WRONLY | O_TRUNC .

BAG-ONG BALA

bukas ug creat ibalik ang bag-o nga file descriptor, o -1 kung adunay usa ka sayop nga nahimo (diin nga kaso, errno gipahimutang nga tukma). Hinumdomi nga ang abli mahimo nga maka-abli sa espesyal nga mga file sa device, apan ang creat dili makahimo niini - paggamit sa mknod (2) sa baylo.

Sa mga sistema sa file sa NFS nga gipadagan ang pag-mapping sa UID, ang bukas mahimo nga mobalik sa usa ka file descriptor apan pananglitan basahon (2) ang mga hangyo nga dili ipaagi sa EACCES . Kini tungod kay ang kliyente nagbukas pinaagi sa pagsusi sa mga permiso, apan ang pagpangita sa UID gihimo sa server sa pagbasa ug pagsulat sa mga hangyo.

Kung ang file bag-ong gimugna, ang oras, oras, mtime nga mga umahan gitakda sa kasamtangan nga panahon, ug mao usab ang ctime ug mtime nga mga natad sa parent directory. Kay kon dili, kon ang file mabag-o tungod sa O_TRUNC flag, ang mga luna sa ctime ug mtime gipahimutang sa kasamtangan nga panahon.

Mga sayup

EEXIST

ang agianan sa agianan anaa na ug ang O_CREAT ug O_EXCL gigamit.

EISDIR

Ang agianan sa dalan nagpasabot sa usa ka direktoryo ug ang access nga gihangyo nga nalambigit pagsulat (nga mao, O_WRONLY o O_RDWR gitakda).

EACCES

Ang gipangayo nga pag-access sa file wala gitugot, o usa sa mga direktoryo sa pathname wala nagtugot sa pagpangita (pagpatuman) nga pagtugot, o wala pa ang file ug pagsulat sa access sa parent directory dili tugutan.

ENAMETOOLONG

Ang kadalanan dugay kaayo.

NANAMAN

Ang O_CREAT wala nahimutang ug ang ngalan nga file wala maglungtad. O, ang usa ka bahin sa direktoryo sa pathname wala maglungtad o usa ka dangling simbolo nga sumpay.

ENOTDIR

Ang usa ka bahin nga gigamit isip usa ka direktoryo sa pathname dili, sa pagkatinuod, ang usa ka direktoryo, o ang O_DIRECTORY gitakda ug ang pathname dili usa ka directory.

ENXIO

O_NONBLOCK | Gipahimutang ang O_WRONLY, ang ginganlan nga file usa ka FIFO ug walay proseso nga gibuksan ang file alang sa pagbasa. O, ang file usa ka espesyal nga file sa device ug wala'y katugbang nga device.

ENODEV

Ang agianan sa dalan nagpasabut sa usa ka espesyal nga file sa himan ug wala'y katugbang nga kagamitan. (Kini usa ka Linux kernel bug - sa kini nga sitwasyon ang ENXIO kinahanglan nga ibalik.)

EROFS

Ang agianan sa dalan nagpasabut sa usa ka file sa usa ka read-only filesystem ug isulat ang access nga gihangyo.

ETXTBSY

Ang agianan sa dalan nga nagtumong sa usa ka executable image nga ginapatuman karon ug gisulat ang gihangyo.

EFAULT

ang mga dalan sa mga punto sa gawas sa imong accessible nga luna sa address.

ELOOP

Daghang simbolikong mga sumpay ang nasugatan diha sa pagsulbad sa agianan nga dalan , o O_NOFOLLOW nga ginganlan apan ang agianan sa dalan usa ka simbolo nga sumpay.

ENOSPC

ang agianan sa dalan gimugna apan ang lalang nga adunay dalan nga wala'y luna alang sa bag-ong file.

ENOMEM

Ang dili igo nga panumduman sa kernel anaa.

EMFILE

Ang proseso adunay labing daghang gidaghanon sa mga file nga gibuksan.

ENFILE

Ang limitasyon sa kinatibuk-ang gidaghanon sa mga file nga gibuksan sa sistema nahimo.

Pagsunod sa

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Ang O_NOFOLLOW ug O_DIRECTORY nga mga bandila maoy Linux -spesifikado. Ang usa tingali kinahanglan nga maghatag kahulugan sa _GNU_SOURCE macro aron makuha ang ilang mga kahulugan.

Mga pagbabag

Adunay daghang mga kalabotan sa protocol nga nagpaluyo sa NFS, nga nakaapekto sa uban O_SYNC ug O_NDELAY .

Ang POSIX naghatag sa tulo ka nagkalainlain nga mga variant sa dungan nga I / O, katumbas sa mga bandila O_SYNC , O_DSYNC ug O_RSYNC . Sa pagkakaron (2.1.130) kini tanan susama sa Linux.