Skip to main content

Otevřete příkaz Linux Command a Unix

Posetitel Muzeya (1989) Lopushansky - Multi Subs (11) ~HD~ [Full] (Červen 2026)

Posetitel Muzeya (1989) Lopushansky - Multi Subs (11) ~HD~ [Full] (Červen 2026)
Anonim

Synopse

#zahrnout #zahrnout #zahrnout int otevřený (const char * název cesty , int vlajky ); int otevřený (const char * název cesty , int vlajky , mode_t režimu ); int creat (const char * název cesty , mode_t režimu );

Popis

Theotevřeno() příkaz system linux linux se používá k převodu názvu cesty do deskriptoru souboru (malé, ne záporné celé číslo pro použití v následujících I / O jako u číst, napsat, atd.). Po úspěšném volání se popisovač souboru vrátí jako nejnižší deskriptor souboru, který není aktuálně otevřen pro daný proces. Toto volání vytvoří nový otevřený soubor, který není sdílen s žádným jiným procesem. (Sdílené otevřené soubory však mohou vzniknout pomocí příkazuVidlička(2) volání systému.) Nový popisovač souborů je nastaven tak, aby zůstal otevřený přes funkce exec (vizfcntl(2)). Posun souboru je nastaven na začátek souboru.

Parametr vlajky je jedním zO_RDONLY, O_WRONLY neboO_RDWR které vyžadují otevření souboru pouze pro čtení, zápis pouze nebo čtení / zápis, resp. nebo 'd s nulou nebo více z následujících hodnot:

O_CREAT

Pokud soubor neexistuje, bude vytvořen. Vlastník (ID uživatele) souboru je nastaven na efektivní uživatelské ID procesu. Vlastnictví skupiny (ID skupiny) je nastaveno buď na aktivní ID skupiny procesu nebo na ID skupiny nadřazeného adresáře (v závislosti na typu souborového systému a volbách připojení a režimu nadřazeného adresáře, viz např. Mount možnosti bsdgroups a sysvgroups souborového systému ext2, jak je popsáno vmount(8)).

O_EXCL

Při použití sO_CREAT, pokud soubor již existuje, je to chyba aotevřeno selže. V tomto kontextu existuje symbolické spojení, bez ohledu na to, odkud jeho body.O_EXCL je poškozen na souborových systémech NFS, programy, které se na něj spoléhají při vykonávání zamykání, budou obsahovat podmínku závodu. Řešení pro provádění blokování souborů pomocí blokovacího souboru je vytvoření jedinečného souboru ve stejném fs (např. S ​​názvem hostitele a pid), použijte odkaz (2) pro vytvoření odkazu na uzamčený soubor. Liodkaz() vrátí 0, zámek je úspěšný. V opačném případě použijte stat(2) na jedinečném souboru, aby se zkontrolovalo, zda se počet odkazů zvýšil na 2, a v takovém případě je zámek také úspěšný.

O_NOCTTY

Li název cesty odkazuje na koncové zařízení --- viztty(4) --- nebude se stát kontrolním terminálem procesu, i když proces nemá jeden.

O_TRUNC

Pokud soubor již existuje a je běžným souborem a otevřený režim umožňuje zápis (tj. Je O_RDWR nebo O_WRONLY), bude zkrácen na délku 0. Pokud je soubor FIFO nebo soubor terminálového zařízení, ignoruje se příznak O_TRUNC. V opačném případě není účinek O_TRUNC blíže specifikován. (U mnoha verzí systému Linux bude ignorováno, v jiných verzích se vrátí chyba.)

O_APPEND

Soubor je otevřen v režimu připojení. Před každýmnapsat, je ukazatel souboru umístěn na konci souboru, jako kdyby byllseek. O_APPEND může vést k poškození souborů v systémech souborů NFS, pokud více než jeden proces připojí data k souboru najednou. Důvodem je to, že NFS nepodporuje připojení k souboru, takže jádro klienta musí simulovat, což nelze provést bez závodu.

O_NONBLOCK neboO_NDELAY

Pokud je to možné, soubor je otevřen v režimu neblokování. Aniotevřeno ani žádné další operace s popisem souboru, který je vrácena, způsobí, že proces volání čekat. Pro manipulaci s FIFO (pojmenované trubky) viz takéfifo(4). Tento režim nemusí mít žádný vliv na soubory jiné než FIFO.

O_SYNC

Soubor je otevřen pro synchronní I / O. Žádnýnapsats na výsledném deskriptoru souborů zablokuje proces volání, dokud data nebudou fyzicky zapsána do základního hardwaru. Viz omezení níže.

O_NOFOLLOW

Li název cesty je symbolické spojení, pak otevřené selže. Jedná se o rozšíření FreeBSD, které bylo přidáno do verze 2.1.126. Symbolické odkazy v dřívějších složkách cesty budou nadále dodržovány. Záhlaví z glibc 2.0.100 a novější obsahují definici této příznaku; jádra před 2.1.126 budou ignorovány, pokud budou použity .

O_DIRECTORY

Li název cesty není adresář, způsobí selhání otevřené. Tento příznak je specifický pro systém Linux a byl přidán do jádra verze 2.1.126, aby se předešlo problémům s odmítnutím služby, pokudopendir(3) je volán na FIFO nebo páskovém zařízení, ale neměl by být používán mimo implementaciopendir.

O_DIRECT

Zkuste minimalizovat efekty vyrovnávací paměti vstupů a výstupů z tohoto souboru. Obecně to zhoršuje výkon, ale je užitečné ve zvláštních situacích, například když aplikace dělají vlastní ukládání do mezipaměti. Soubor I / O se provádí přímo z vyrovnávací paměti uživatelského prostoru. I / O je synchronní, tj. Při dokončení číst(2) nebonapsat(2) systémové volání, je zaručena přenos dat. Velikosti přenosu a vyrovnání uživatelského vyrovnávací paměti a posunu souboru musí být násobky velikosti logického bloku souborového systému.Tento příznak je podporován na mnoha systémech typu Unix; podpora byla přidána pod linuxem v jádře verze 2.4.10.Sémanticky podobné rozhraní pro bloková zařízení je popsáno vdrsný(8).

O_ASYNC

Generování signálu (výchozí nastavení SIGIO, ale lze jej změnit pomocífcntl(2)), pokud je vstup nebo výstup možný v tomto deskriptoru souboru. Tato funkce je k dispozici pouze pro terminály, pseudo-terminály a zásuvky. Vidětfcntl(2) pro další podrobnosti.

O_LARGEFILE

Na 32bitových systémech, které podporují systém velkých souborů, povolte otevření souborů, jejichž velikosti nelze zobrazit v 31 bitových souborech.

Některé z těchto volitelných příznaků lze měnit pomocífcntl po otevření souboru.

Argument režimu určuje oprávnění k použití v případě vytvoření nového souboru. Je modifikována procesemumask obvyklým způsobem: oprávnění vytvořeného souboru jsou(režim & ~ umask). Tento režim platí pouze pro budoucí přístupy nově vytvořeného souboru.otevřenovolání, které vytvoří soubor pouze pro čtení, může vrátit deskriptor souboru pro čtení a zápis.

K dispozici jsou následující symbolické konstanty režimu :

S_IRWXU

00700 uživatel (vlastník souboru) číst, zapisovat a provádět oprávnění

S_IRUSR (S_IREAD)

Uživatel 00400 má oprávnění ke čtení

S_IWUSR (S_IWRITE)

Uživatel má oprávnění k zápisu

S_IXUSR (S_IEXEC)

00100 uživatel má oprávnění k provádění

S_IRWXG

Skupina 00070 čte, zapisuje a provede oprávnění

S_IRGRP

Skupina 00040 má oprávnění ke čtení

S_IWGRP

Skupina 00020 má oprávnění k zápisu

S_IXGRP

Skupina 00010 má oprávnění k provádění

S_IRWXO

00007 Ostatní mají oprávnění číst, psát a spouštět

S_IROTH

00004 ostatní mají povolení ke čtení

S_IWOTH

00002 ostatní mají povolení k zápisu

S_IXOTH

00001 ostatní mají oprávnění k provedení

režimu musí být zadáno, kdyžO_CREAT je v vlajky , a jinak se ignoruje.

creat je ekvivalentníotevřeno s vlajky rovnáO_CREAT | O_WRONLY | O_TRUNC.

ZPĚTNÁ HODNOTA

otevřeno acreat vrátí nový deskriptor souboru nebo -1, pokud dojde k chybě (v takovém případě, errno je nastaven správně). Všimněte si, žeotevřeno může otevřít speciální soubory zařízení, alecreat nemůže je vytvořit - použítmknod(2).

Na systémech souborů NFS s povoleným mapováním UID,otevřeno může vrátit deskriptor souboru, ale např. číst(2) žádosti jsou zamítnutyEACCES. Je to proto, že klient provádíotevřeno kontrola oprávnění, ale mapování UID provádí server po požadavcích na čtení a zápis.

Pokud je soubor nově vytvořen, jeho pole atime, ctime, mtime jsou nastaveny na aktuální čas a stejně tak jsou pole ctime a mtime nadřazeného adresáře. V opačném případě, pokud je soubor změněn kvůli příznaku O_TRUNC, jeho pole ctime a mtime jsou nastaveny na aktuální čas.

Chyby

EEXIST

název cesty již existuje aO_CREAT aO_EXCL byly použity.

EISDIR

název cesty odkazuje na adresář a požadovaný přístup zahrnující psaní (tj.O_WRONLY neboO_RDWR je nastaveno).

EACCES

Požadovaný přístup do souboru není povolen, nebo některý z adresářů není název cesty nepovolil oprávnění pro vyhledávání (spuštění) nebo soubor dosud neexistoval a přístup k zápisu do nadřazeného adresáře není povolen.

ENAMETOOLONG

název cesty byl příliš dlouhý.

ENOENT

O_CREAT není nastavena a pojmenovaný soubor neexistuje. Nebo složka adresáře v souboru název cesty neexistuje nebo je symbolizující odkaz.

ENOTDIR

Komponent používaný jako adresář v název cesty není ve skutečnosti adresář, neboO_DIRECTORYbyl zadán a název cesty nebyl adresář.

ENXIO

O_NONBLOCK | O_WRONLY je nastaven, jmenovaný soubor je FIFO a žádný proces nemá soubor otevřený pro čtení. Nebo soubor je speciální soubor zařízení a neexistuje odpovídající zařízení.

ENODEV

název cesty odkazuje na speciální soubor zařízení a neexistuje odpovídající zařízení. (Jedná se o chybu jádra systému Linux - v takovém případě musí být ENXIO vrácena.)

EROFS

název cesty odkazuje na soubor na souborovém systému jen pro čtení a byl požadován přístup k zápisu.

ETXTBSY

název cesty odkazuje na spustitelný obrázek, který je aktuálně spuštěn a byl požadován přístup k zápisu.

EFAULT

název cesty mimo přístupný adresní prostor.

ELOOP

Při řešení bylo zaznamenáno příliš mnoho symbolických vazeb název cesty , neboO_NOFOLLOW byl specifikován, ale název cesty byla symbolická vazba.

ENOSPC

název cesty měl být vytvořen, ale zařízení obsahující název cesty nemá žádný prostor pro nový soubor.

ENOMEM

Nedostatečná paměť jádra byla k dispozici.

EMFILE

Proces již má otevřený maximální počet souborů.

ENFILE

Byla dosažena omezení celkového počtu souborů otevřených v systému.

V souladu s

SVR4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW aO_DIRECTORY příznaky jsou specifické pro systém Linux. Možná budete muset definovat_GNU_SOURCE makra získat jejich definice.

Omezení

V protokolu, který je základem pro systém souborů NFS, existuje mnoho nepřesností, které ovlivňují mimo jinéO_SYNC aO_NDELAY.

POSIX poskytuje tři různé varianty synchronizovaných vstupů / výstupů odpovídající vlajkámO_SYNC , O_DSYNC a O_RSYNC. V současné době (2.1.130) jsou všechny v Linuxu synonymem.