Skip to main content

Nyissa meg a Linux parancsot és a Unix parancsot

One Person, Three Faces, One Aspire 5 | Acer (Április 2025)

One Person, Three Faces, One Aspire 5 | Acer (Április 2025)
Anonim

Szinopszis

#include #include #include int nyitva (const char * pathname , int zászlók ); int nyitva (const char * pathname , int zászlók , mód_t mód ); int creat (const char * pathname , mód_t mód );

Leírás

Anyisd ki() a rendszerhívás linux parancsot arra használják, hogy egy elérési utat fájl-leíróvá alakítsanak (egy kicsi, nem negatív egész szám a későbbi I / O olvas, ír, stb.). Amikor sikeres a hívás, a fájlliterjesztő visszaadja a legalacsonyabb fájlleíró, amely jelenleg nem nyitott a folyamathoz. Ez a hívás új nyitott fájlt hoz létre, amelyet nem lehet megosztani más folyamattal. (De a megosztott nyílt fájlok aVilla(2) rendszerhívás.) Az új fájlleírást úgy állítjuk be, hogy nyitva maradjon a végrehajtási függvényekben (ldfcntl(2)). A fájl-eltolás beállítása a fájl elejére van állítva.

A paraméter zászlók egyike aO_RDONLY, O_WRONLY vagyO_RDWR amelyek megkövetelik, hogy a fájl csak olvasható, írható vagy olvasható / írható, bitwise- vagy 'd a következő értékek közül nulla vagy több:

O_CREAT

Ha a fájl nem létezik, akkor létrejön. A fájl tulajdonosának (felhasználói azonosítója) a folyamat tényleges felhasználói azonosítójára van állítva. A csoport tulajdonjoga (csoportazonosító) a folyamat tényleges csoportazonosítójához vagy a szülőkönyvtár csoport azonosítójához (a fájlrendszer típusától és a csatolási beállításoktól függően, valamint a szülőkönyvtár módjától függően lásd például a csatolást opciók bsdgroups és sysvgroups az ext2 fájlrendszer, ahogyan azt ahegy(8)).

O_EXCL

Ha használjákO_CREAT, ha a fájl már létezik, hiba és anyisd ki el fog bukni. Ebben az összefüggésben létezik egy szimbolikus kapcsolat, függetlenül attól, hogy hol hivatkozik rá.O_EXCL megszakad az NFS fájlrendszereken, azok a programok, amelyek a lezárási feladatok elvégzésére támaszkodnak, versenyfeltételeket tartalmaznak. A lezárófájl használatával végrehajtott atomfájl-lezárás megoldásához egy egyedi fájl létrehozása ugyanazon az fs-en (például a gazdagép és a párosítás beépítése esetén), használja a linket (2), hogy linket hozzon létre a zárfájlhoz. Halink() 0 értéket ad vissza, a zár sikeres. Ellenkező esetben használja statisztika(2) az egyedi fájlban, hogy ellenőrizze, hogy a kapcsolat száma 2-re nőtt-e, ez esetben a zár is sikeres.

O_NOCTTY

Ha pathname egy terminál eszközre utal - lásdtty(4) --- nem lesz a folyamat vezérlő terminálja akkor sem, ha a folyamatnak nincsen.

O_TRUNC

Ha a fájl már létezik, és egy szabályos fájl, és a nyílt mód lehetővé teszi az írást (azaz O_RDWR vagy O_WRONLY), akkor a csomópont a 0. hossza lesz. Ha a fájl FIFO vagy terminál eszköz fájl, akkor az O_TRUNC jelzőt figyelmen kívül hagyja. Ellenkező esetben az O_TRUNC hatása nem meghatározott. (Sok Linux verziónál figyelmen kívül hagyja, más verziók esetén hibát fog kapni.)

O_APPEND

A fájl megnyitása függő módban történik. Minden előttír, a fájl mutatója a fájl végén található, mintha alseek. O_APPEND az NFS fájlrendszeren sérült fájlokat eredményezhet, ha egynél több folyamat egyidejűleg adatot ad hozzá egy fájlhoz. Ez azért van így, mert az NFS nem támogatja a fájlhoz való csatolását, ezért az ügyfélkernelnek szimulálnia kell azt, ami nem lehetséges versenyhelyzet nélkül.

O_NONBLOCK vagyO_NDELAY

Ha lehetséges, a fájl nem blokkoló üzemmódban nyílik meg. Sem anyisd ki sem a későbbi műveletek a visszaadott fájlleíróban a hívás folyamatát várják. A FIFO-k (pl. Csövek) kezelésére lásd mégFIFO(4). Ennek a módnak nincs hatása a FIFO-któl eltérő fájlokra.

O_SYNC

A fájl megnyílik a szinkron I / O-hoz. Bármilyenírs a leírt fájlleíróban blokkolja a hívási folyamatot, amíg az adatok fizikailag nem íródnak az alatta lévő hardverre. Lásd a KORLÁTOZÁSOK alább.

O_NOFOLLOW

Ha pathname egy szimbolikus link, akkor a nyitó sikertelen. Ez egy FreeBSD kiterjesztés, amelyet a 2.1.126-os verzióhoz adtak a Linuxhoz. A pálya korábbi összetevőinek szimbolikus hivatkozásait továbbra is követni fogják. A glibc 2.0.100 és későbbi fejlécek tartalmazzák a zászló meghatározását; a rendszermagok a 2.1.126 előtt figyelmen kívül hagyják, ha használják .

O_DIRECTORY

Ha pathname nem könyvtár, mert a nyitott hiba. Ez a zászló Linux-specifikus, és a rendszermag 2.1.126 verziójához lett hozzáadva, hogy elkerülje a szolgáltatás megtagadásátopendir(3) egy FIFO vagy szalagos eszközre hívják fel, de nem szabad használni aopendir.

O_DIRECT

Próbálja meg minimalizálni az I / O gyorsítótár hatásait ebbe a fájlba. Általánosságban ez csökkenti a teljesítményt, de hasznos speciális helyzetekben, például amikor az alkalmazások saját gyorsítótárakat végeznek. A fájl I / O-t közvetlenül a felhasználói tér pufferekhez / felhasználói felületekből készítik. Az I / O szinkron, azaz a olvas(2) vagyír(2) rendszerhívás, az adatok garantáltan átadásra kerülnek. Az átviteli méret, valamint a felhasználói puffer és a fájl eltolás beállítása mindegyike a fájlrendszer logikai blokkméretének többszöröse lehet.Ezt a zászlót számos Unix-szerű rendszer támogatja; a Linux 2.4.10-es verziójában támogatást kapott.A blokkeszközök szemantikailag hasonló felületét írjuk lenyers(8).

O_ASYNC

Generáljon jelet (SIGIO alapértelmezés szerint, de ez megváltoztathatófcntl(2)), amikor a bemeneti vagy a kimeneti fájl ezen a fájlleíróon lehetséges. Ez a funkció csak a terminálok, pszeudo terminálok és aljzatok számára áll rendelkezésre. Látfcntl(2) további részletekért.

O_LARGEFILE

A 32 bites rendszereken, amelyek támogatják a nagy fájlrendszereket, olyan fájlokat engedélyeznek, amelyek méretét nem lehet megjeleníteni 31 bitet nyitni.

Néhány ilyen opcionális zászló megváltoztathatófcntl a fájl megnyitása után.

A vita mód megadja az új fájl létrehozásának engedélyezését. Ezt a folyamat módosítjaumask a szokásos módon: a létrehozott fájl engedélyei(mód & ~ umask). Ne feledje, hogy ez az üzemmód csak az újonnan létrehozott fájl jövőbeli eléréseire vonatkozik; anyisd kiA csak olvasható fájl létrehozása esetén az olvasási / írási fájlleíró visszaállítható.

A következő szimbolikus állandók vannak megadva mód :

S_IRWXU

A 00700 felhasználó (fájl tulajdonos) olvasott, ír és végrehajtott engedélyt

S_IRUSR (S_IREAD)

00400 felhasználó olvasási engedélyt kapott

S_IWUSR (S_IWRITE)

A 00200 felhasználónak írási engedélye van

S_IXUSR (S_IEXEC)

00100 felhasználó engedélyt hajt végre

S_IRWXG

00070 csoport olvasott, írható és végrehajtott engedélyt

S_IRGRP

00040 csoport olvasási engedélyt kapott

S_IWGRP

A 00020-as csoportnak írási engedélye van

S_IXGRP

00010 csoport engedélyt hajtott végre

S_IRWXO

00007 mások olvassák, írják és végrehajtják az engedélyt

S_IROTH

00004 mások olvasási engedélyt kaptak

S_IWOTH

00002 mások írási joggal rendelkeznek

S_IXOTH

00001 mások engedélyt hajtottak végre

mód meg kell adni, mikorO_CREAT benne van a zászlók , máskülönben figyelmen kívül hagyja.

létrehozva egyenértékűnyisd ki val vel zászlók egyenlőO_CREAT | O_WRONLY | O_TRUNC.

TÖRLÉS ÉRTÉKE

nyisd ki éslétrehozva az új fájlleíró visszaadása, vagy -1 ha hiba történt (ebben az esetben, errno megfelelően van beállítva). Vegye figyelembe, hogynyisd ki meg tudja nyitni az eszköz speciális fájljait, delétrehozva nem tudják létrehozni őket - használnimknod(2) helyett.

Az NFS fájlrendszereken, amelyeken az UID leképezés engedélyezett,nyisd ki visszatérhet egy fájlleíróhoz, pl. olvas(2) megtagadják a kéréseketEACCES. Ez azért van, mert az ügyfél végzi elnyisd ki az engedélyek ellenőrzésével, de az UID-leképezést a szerver az olvasási és írási kérések alapján végzi.

Ha a fájl újonnan létrehozva van, az idő, a ctime, az mtime mezők az aktuális időre vannak állítva, és így vannak a szülőkönyvtár ctime és mtime mezői is. Ellenkező esetben, ha a fájl az O_TRUNC jelző miatt módosul, annak ctime és mtime mezői az aktuális időre állnak.

hibák

EEXIST

pathname már létezik ésO_CREAT ésO_EXCL voltak használva valamire.

EISDIR

pathname utal egy könyvtárra és a kért hozzáférésre, amely az íráshoz kapcsolódik (azaz,O_WRONLY vagyO_RDWR beállítva).

EACCES

A kért hozzáférés a fájlhoz nem engedélyezett, vagy a könyvtárak egyike pathname nem engedélyezte a keresési (engedélyezési) engedélyt, vagy a fájl még nem létezett, és a szülői könyvtárhoz való hozzáférés írása nem engedélyezett.

ENAMETOOLONG

pathname túl hosszú volt.

ENOENT

Az O_CREAT nincs beállítva, és a megadott fájl nem létezik. Vagy a könyvtár összetevője a következőben: pathname nem létezik, vagy egy lógó szimbolikus kapcsolat.

ENOTDIR

A könyvtárban használt összetevő pathname valójában nem könyvtár, vagyO_DIRECTORYés pathname nem volt könyvtár.

ENXIO

O_NONBLOCK | O_WRONLY van beállítva, a megnevezett fájl FIFO, és egyetlen folyamat sem nyitja meg a fájlt az olvasáshoz. Vagy a fájl egy speciális eszköz, és nincs megfelelő eszköz.

ENODEV

pathname az eszköz speciális fájljára utal, és nincs megfelelő eszköz. (Ez egy Linux kernel hiba - ebben az esetben az ENXIO-t vissza kell küldeni.)

EROFS

pathname egy csak olvasható fájlrendszeren lévő fájlra vonatkozik, és írási hozzáférést kért.

ETXTBSY

pathname egy futtatható képre vonatkozik, amely jelenleg fut, és írási hozzáférést kért.

EFAULT

pathname pontokat a hozzáférhető címtartományon kívül.

ELOOP

Túl sok szimbolikus kapcsolatot találtunk a megoldásban pathname , vagyO_NOFOLLOW meg van adva, de pathname szimbolikus link volt.

ENOSPC

pathname létrehozni kellett, de az eszközt tartalmaznia kellett pathname nincs helye az új fájlnak.

ENOMEM

Nem áll rendelkezésre elegendő kernel memória.

EMFILE

A folyamat már a fájlok maximális számát nyitja meg.

ENFILE

Elértük a rendszeren megnyitott összes fájlra vonatkozó korlátot.

Megfelel a

SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW ésO_DIRECTORY a zászlók Linux-specifikusak. Lehet, hogy meg kell határoznia a_GNU_SOURCE makrót a definíciók megszerzéséhez.

korlátozások

Az NFS alapjául szolgáló protokollban sok gondatlanság tapasztalható, amelyek többek között befolyásoljákO_SYNC ésO_NDELAY.

A POSIX a szinkronizált I / O három különböző változatát biztosítja, amely megfelel a zászlóknakO_SYNC , O_DSYNC és O_RSYNC. Jelenleg (2.1.130) ezek mindegyike Linux alatt áll.