Learje de Linux Kommando Iepenje

Synopsis

#include << A HREF = "bestân: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "bestân: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "bestân: /usr/include/fcntl.h"> fcntl.h> int iepen (const char * wegname , int flaggen ); int open (const char * padenamme , int flaggen , mode_t modus ); int creat (const char * paadname, mode_t modus );

Beskriuwing

It opjûne linux- kommando iepen () ynlaat wurdt brûkt om in paadnammen yn in bestânskriptor te feroarjen (in lyts, net-negative integer foar gebrûk yn lettere I / O as lêzen , skriuwen , ensfh.). Wannear't de oprop suksesfol is, de triem- descriptor werom as de leechste triem-descriptor is op dit stuit net iepen foar it proses. Dizze oprop soarget in nije iepen triem, dield net mei elke oare proses. (Mar dield iepenje triemmen kinne ûntfange fia de gabel (2) systeembel.) De nije triem-descriptor is ynsteld om te iepenjen oer eksekutyffunksjes (sjoch fcntl (2)). De triemoffset wurdt ynsteld oan it begjin fan de triem.

De parameterflaggen is ien fan 'e O_RDONLY , O_WRONLY of O_RDWR dy't it fersyk iepenje fan it lêzen-lêzen, skriuwen-of lêzen / skriuwen, respektivelik, bitine- of ' d mei nul of mear fan 'e neikommende:

O_CREAT

As de bestân bestiet net sil it makke wurde. De eigner (user ID) fan 'e bestân is ynsteld op de effektive brûkerside fan it proses. De groepbeskerming (groep-ID) wurdt ynsteld nei de effektive groep-ID fan it proses of nei de groep-ID fan it haadmateriaal (ôfhinklik fan triemtyp- en beropsopsjes, en de modus fan de haadbehear, sjoch bygelyks de berch opsjes bsdgroups en sysvgroups fan it ext2-triemsysteem, lykas beskreaun yn mount (8)).

O_EXCL

Wannear brûkt wurdt mei O_CREAT , as it bestân al bestiet, is it in flater en de iepene sil mislearre. Yn dit ferbân is in symboalyske link bestean, sûnder wêr't syn punten te krijen hawwe. O_EXCL is brutsen op NFS-bestânsysteem , programma's dy't op dy konklúzje foar it útfieren fan ferfangende taken in race-kondysje befetsje. De oplossing foar it útfieren fan atoomfile ferpleatse mei in lockfile is om in unike triem op deselde fs te meitsjen (bgl. Hostnamme en pid), keppeling gebrûk meitsje (2) om in keppeling te meitsjen oan de Lockfile. As link () weromkommt 0, wurdt de slús suksesfol. Oars, gebrûk fan stat (2) op 'e unike triem om te kontrolearjen oft har keppelregel op 2 ferhege is, yn hokker gefal is de slûs ek suksesfol.

O_NOCTTY

As paadwizer ferwiist nei in terminal apparaat --- sjoch tty (4) --- it sil net it kontrolearjen fan terminal wêze, sels as it proses gjin ien hat.

O_TRUNC

As de bestân al bestiet en is in gewoane bestân en de iepen modus lit it skriuwen wêze (dat is O_RDWR of O_WRONLY) sil it ta lingte wurde wurde. As de triem in FIFO-of terminal-triemtriem is, wurdt de O_TRUNC-flagge net bewarre. Oars wurdt it effekt fan O_TRUNC net oanjûn. (Op ferskate Linux- ferzjes wurdt it net bewarre, mar oare ferzjes sille it in flater weromsette.)

O_APPEND

De triem wurdt iepene yn 'e appendemodus. Foardat elke skriuwt , wurdt de triem pointer oan 'e ein fan de triem pleatst , lykas by lseek . O_APPEND kin liede ta ferneatige triemmen op NFS-bestânsysteem as mear as ien proses ien kear opnij oanfreget. Dit is omdat NFS gjin stipe foar apparaat is foar in bestân, sadat de client kernel it simulearje moat, dat kin net sûnder in racebedrach dien wurde.

O_NONBLOCK of O_NDELAY

As it mooglik is, wurdt de triem iepene yn net-blokkemodus. Wyls de iepen of gjin folgjende operaasjes op 'e triem-descriptor dy't weromjûn wurdt, feroarsake it oproppe proses om te wachtsjen. Foar it behanneljen fan FIFO's (neamde pipes) sjoch ek fifo (4). Dizze modus hat gjin effekt op oare triemmen as FIFO's.

O_SYNC

De triem is iepene foar synchronyske I / O. Elk skriuw s op 'e resultant triem-descriptor sil it ropproses blockearje oant de gegevens fysysk skreaun binne oan de ûnderlizzende hardware. Sjoch RJOCHTTROCH hjirûnder, hoewol.

O_NOFOLLOW

As paadnamme in symboalyske keppeling is, falt it iepen. Dit is in FreeBSD-útwreiding, dy't oan Linux yn version 2.1.126 tafoege waard. Symbolyske keppelings yn eardere komponenten fan 'e paadnammen wurde noch folge. De kopers fan glibc 2.0.100 en letter befetsje in definysje fan dizze flagge; kernels foar 2.1.126 sille it brûke as se brûkt wurde .

O_DIRECTORY

As paadnamme gjin directory is, lit de iepenje foarkomme. Dizze flagge is Linux-spesifisearre, en is tafoege yn kernel ferzje 2.1.126, om ûntbining-tsjin-problemen te foarkommen as opnij (3) wurde op in FIFO- of tape-apparaat neamd, mar net bûten de ymplemintaasje fan opspring brûkt wurde .

O_DIRECT

Besykje de cache-effekten fan 'e I / O nei en fan dit bestân te minimalisearjen. Yn it algemien sil dizze weardigens degradearje, mar it is handich yn spesjale situaasjes, lykas by applikaasjes in eigen caching. Triem I / O wurdt direkt oan / fan brûkersromte-buffers dien. De I / O is syngronisearre, dus by it foltôgjen fan it lêzen (2) of skriuw (2) systeembel, wurde gegevens garandearre om oer te setten. Fergruttingsgrutte, en de alaarming fan brûkersbuffer en triemoffset moat allegearre meielfolle fan 'e logyske blokmaat fan it bestânsysteem wêze.
Dizze flagge wurdt stipe op in oantal unix-like systeem; Support is tafoege ûnder Linux yn kernel ferzje 2.4.10.
In semantysk ferlykbere ynterface foar blokfoarmingen wurdt beskreaun yn roaz (8).

O_ASYNC

Generearje in sinjaal (SIGIO per standert, mar dit kin feroare wurde fia fcntl (2)) as ynput of output is mooglik op dizze bestânskriptor . Dizze funksje is allinne beskikber foar terminen, pseudo-terminalen en sockets. Sjoch fcntl (2) foar mear details.

O_LARGEFILE

Op 32-bit-systemen dy't de Grutte Filesysteem stipe, kinne triemmen litte wêrmei de siden net fertsjinne wurde yn 31 bits te iepenjen.

Guon fan dizze opsjonele flaggen kinne feroare wurde troch using fcntl nei't de triem iepene is.

De argumintmodus bepaalt de tagongsrjochten om te brûken yn foarkar in nije triem is makke. It wurdt troch de processus feroare yn 'e gewoane manier: de tagongsrjochten fan it oanmeitsene bestân binne (modus & ~ umask) . Tink derom dat dizze modus allinne jildt foar takomstige tagongsrjochten fan 'e nij te meitsjen triem; De iepen oprop dy't in lês-allinne triem generearret, kin in lêzer- of skriuwdeskriptor weromhelje.

De folgjende symboalyske konstanten binne foar modus te krijen :

S_IRWXU

00700 brûker (bestâneigner) hat de fergunning lêzen, skriuwen en útfiert

S_IRUSR (S_IREAD)

00400 brûker hat tastimming

S_IWUSR (S_IWRITE)

00200 brûker hat skriuwrjochten

S_IXUSR (S_IEXEC)

00100 brûker hat tastimming

S_IRWXG

00070 groep hat lêzen, skriuwen en fergunning ferfangen

S_IRGRP

00040 groep hat tastimming

S_IWGRP

De groep 00020 hat skriuwe tastimming

S_IXGRP

00010 groep hat tastimming

S_IRWXO

00007 oaren hawwe lêzen, skriuwen en fergunning ferfangen

S_IROTH

00004 oaren hawwe tastimming foar lêzen

S_IWOTH

00002 oaren hawwe skriuw tastimming

S_IXOTH

00001 oaren hawwe fergunning útfierd

Mode moat oantsjutte wurde as O_CREAT yn 'e flaggen is , en wurdt oars negearre.

Kreat is lykweardich mei iepen flaggen lyk oan O_CREAT | O_WRONLY | O_TRUNC .

RETURN VALUE

Iepenje en krekt de nije triem-descriptor werom, of -1 as in flater bard is (yn hokker gefal is errno goed ynsteld). Tink derom dat iepen kin apparaat spesjale triemmen iepenje, mar kreat kin dizze net oanmeitsje - gebrûk fan mknod (2) ynstee.

Op NFS-triemsysteem mei UID-mappen ynskeakele, kin iepenje in triem-descriptor werom, mar bygelyks lês (2) fersiken wurde ferwiisd mei EACCES . Dit is om't de client útfiert troch it kontrolearjen fan de tagongsrjochten, mar de UID-mappen wurdt troch de server útfiert op lês- en skriuwakses.

As de triem neef makke is, wurde de atime, ctime, mtime-fjilden op 'e aktuele tiid ynsteld, en sa binne de ctime- en mtime-fjilden fan it haadmap. Oars, as de triem feroare is fanwegen de flagge O_TRUNC, binne de ctime en mtime fjilden op 'e aktuele tiid ynsteld.

Flater

EEXIST

Pathname bestiet al en O_CREAT en O_EXCL binne brûkt.

EISDIR

Pathname ferwiist nei in triemtafel en de tagong frege beleidige skriuwen (dat is, O_WRONLY of O_RDWR is ynsteld).

EACCES

De frege tagong ta de triem is net tastien, of ien fan 'e mappen yn mappaad koe gjin sykjen (útfiere) tastimming jaan, of de triem koe noch net besteane en de tagong krije ta tagong ta de haadmateriaal is net tastien.

ENAMETOOLONG

Pathname wie te lang.

ENOENT

O_CREAT is net ynsteld en de nammen triem bestiet net. Of, in komponint fan triemtafel yn paadwiziging bestiet net of is in dangling symboalyske keppeling.

ENOTDIR

In komponint dat brûkt wurdt as directory yn paadwiziging is net in feit, in map, of O_DIRECTORY is oanjûn en paadwizer is gjin directory.

ENXIO

O_NONBLOCK | O_WRONLY is ynsteld, de namme is in FIFO en gjin proses hat de triem iepen foar it lêzen. Of it bestân is in spesjale spesjale triem en gjin oerienkommende apparaat bestiet.

ENODEV

Pathname ferwiist nei in spesjale spesjale triem en gjin oerienkommende apparaat bestiet. (Dit is in Linux kernel brek - yn dizze situaasje moat ENXIO weromjûn wurde.)

EROFS

Pathname ferwiist nei in bestân op in lês-allinnich triemsysteem en skriuwtagong waard frege.

ETXTBSY

Pathname ferwiist nei in útfierbere ôfbylding dy't op it stuit opfierd wurdt en de skriuwtagong frege waard.

EFAULT

Pathname punten bûten jo tagonklike adresromte.

ELOOP

Troch in soad symboalyske keppelingen waarden beoardiele by it oplossen fan paadwizigjen , of O_NOFOLLOW waard oanjûn, mar it paadnamme wie in symboalyske keppeling.

ENOSPC

Pathname is te meitsjen mar it apparaat dat PathName hat gjin room foar it nije bestân.

ENOMEM

Net genôch kernel-ûnthâld wie beskikber.

EMFILE

It proses hat al it maksimale getal fan triemen iepen.

ENFILE

De limyt op it totaal oantal triemmen iepenje op it systeem is berikt.

Wetter - Agrarwetter

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 De flaggen O_NOFOLLOW en O_DIRECTORY binne Linux -specific. Men kin it _GNU_SOURCE makro definiearje om har definysje te krijen.

Beskikberens

Der binne in protte ûnferbidingen yn it protokol dy't NFS ûnderlizze, beynfloedzje tusken oaren O_SYNC en O_NDELAY .

POSIX soarget foar trije ferskillende farianten fan synchronisearre I / O, oerienkomt mei de flaggen O_SYNC , O_DSYNC en O_RSYNC . Op dit stuit (2.1.130) binne dit allegear ûnder Linux.