otevřené (systémové volání) - open (system call)

U většiny souborových systémů , je program, inicializuje přístup k souboru v souborovém systému pomocí otevřené systémové volání . To přiděluje prostředky přidružené k souboru ( deskriptor souboru ) a vrátí popisovač, který proces použije k odkazu na tento soubor. V některých případech je otevření provedeno prvním přístupem.

Stejný soubor může být otevřen současně několika procesy a dokonce stejným procesem, což vede k několika deskriptorům souborů pro stejný soubor; v závislosti na organizaci souborů a souborovém systému. Operace s deskriptory, jako je přesunutí ukazatele souboru nebo jeho zavření, jsou nezávislé - nemají vliv na jiné deskriptory pro stejný soubor. Operace se souborem, jako je zápis , lze zobrazit pomocí operací s jinými deskriptory: pozdější čtení může číst nově zapsaná data.

Během toho openmůže souborový systém přidělit paměť pro vyrovnávací paměti nebo může počkat do první operace.

Absolutní cesta k souboru je vyřešen. To může zahrnovat připojení ke vzdálenému hostiteli a upozornění operátora, že je vyžadováno vyměnitelné médium. Může zahrnovat inicializaci komunikačního zařízení. V tomto okamžiku může být vrácena chyba, pokud hostitel nebo médium není k dispozici. Provede se první přístup alespoň k adresáři v souborovém systému. Chyba se obvykle vrátí, pokud komponenty na vyšší úrovni cesty ( adresáře ) nelze najít nebo k nim získat přístup. Bude vrácena chyba, pokud se očekává, že soubor bude existovat a nebude, nebo pokud soubor již neexistuje a bude.

Pokud se očekává, že soubor bude existovat a bude existovat, je přístup k souboru, jak je omezen příznaky oprávnění v rámci metadat souboru nebo seznamu řízení přístupu , ověřen podle požadovaného typu operací. To obvykle vyžaduje další přístup k souborovému systému, i když v některých souborových systémech mohou být meta-příznaky součástí adresářové struktury.

Pokud se soubor vytváří, může souborový systém přidělit výchozí počáteční velikost úložiště nebo určenou velikost v závislosti na schopnostech systému souborů. Pokud se to nepodaří, bude vrácena chyba. Může být provedena aktualizace adresáře novou položkou nebo může být odloženo, dokud se neprovede zavření .

Různé další chyby, které mohou nastat během otevření, zahrnují selhání aktualizace adresáře, nepovolená vícenásobná připojení, selhání médií, selhání komunikačních odkazů a selhání zařízení.

Návratová hodnota musí být vždy prozkoumána a musí být provedena akce specifická pro chybu.

V mnoha případech může otevření knihovny run-time specifické pro programovací jazyk provést další akce, včetně inicializace struktury run-time knihovny související se souborem.

Jakmile již soubor není potřeba, měl by ho program zavřít. To způsobí aktualizaci běhové knihovny a vyrovnávacích pamětí souborového systému na fyzické médium a umožní dalším procesům přístup k datům, pokud bylo požadováno výhradní použití. Některé knihovny za běhu mohou zavřít soubor, pokud program volá ukončení za běhu. Některé souborové systémy mohou provést nezbytné operace, pokud program skončí. Ani jedna z nich se pravděpodobně neuskuteční v případě selhání jádra nebo napájení. To může způsobit poškození struktur souborového systému vyžadujících spuštění privilegovaných a zdlouhavých obslužných programů souborového systému, během nichž může být celý souborový systém nepřístupný.

otevřené argumenty volání

  1. Cesta k souboru,
  2. Druh požadovaného přístupu k souboru (čtení, zápis, přidání atd.),
  3. Počáteční povolení souboru je požadováno pomocí třetího volaného argumentu mode. Tento argument je relevantní pouze při vytváření nového souboru.

Po použití souboru by proces měl zavřít soubor pomocí volání close , které přebírá deskriptor souboru, který má být uzavřen. Některé souborové systémy obsahují dispozici, která umožňuje vydání souboru.

Některé počítačové jazyky obsahují běhové knihovny, které obsahují další funkce pro konkrétní souborové systémy. Otevřená (nebo nějaká pomocná rutina) může obsahovat specifikace velikosti klíče, velikosti záznamu, rychlosti připojení. Některé otevřené rutiny zahrnují specifikaci programového kódu, který se má provést v případě chyby.

Forma jazyka Perl

open FILEHANDLE,MODE[,EXPR]

například:

open(my $fh, ">", "output.txt");

Perl také používá tiefunkci Tie::Filemodulu k přidružení pole k souboru. tie::AnyDBM_FileFunkce sdružuje hash se souborem.

Definice POSIX knihovny C

Otevřený hovor je standardizován POSIX specifikace jazyka C :

int open(const char *path, int oflag, .../*,mode_t mode */);
int openat(int fd, const char *path, int oflag, ...);
int creat(const char *path, mode_t mode);
FILE *fopen(const char *restrict filename, const char *restrict mode);

Vrácená hodnota je deskriptor souboru, který je odkazem na strukturu specifickou pro proces, která mimo jiné obsahuje ukazatel polohy, který označuje, na které místo v souboru se bude při příští operaci jednat.

Otevřený může vrátit -1 označující poruchu s errnopodrobným popisem chyby.

Souborový systém také aktualizuje globální tabulku všech otevřených souborů, která se používá k určení, zda je soubor aktuálně používán jakýmkoli procesem.

cesta

Název souboru, který se má otevřít. Zahrnuje cestu k souboru definující, kde, ve kterém systému souborů, je soubor nalezen (nebo má být vytvořen).

openat očekává relativní cestu.

oflag

Tento argument vytvořený spojením OR'se volitelnými parametry a (z < fcntl.h >) jedním z:

O_RDONLY, O_RDWRaO_WRONLY

Mezi parametry patří:

O_APPENDzapsaná data budou připojena na konec souboru. Operace se soubory vždy upraví ukazatel polohy na konec souboru.
O_CREATVytvořte soubor, pokud neexistuje; v opačném případě selže nastavení nastavení errno na ENOENT.
O_EXCLPoužívá se, O_CREATpokud soubor již existuje, pak selže, nastavení errno na EEXIST.
O_TRUNCPokud soubor již existuje, zahoďte jeho předchozí obsah a zredukujte jej na prázdný soubor. Nelze použít pro zařízení nebo pojmenované potrubí.

Další příznaky a chyby jsou definovány v otevřeném volání.

creat() je implementován jako:

int creat(const char *path, mode_t mode)
{
    return open(path, O_WRONLY|O_CREAT|O_TRUNC, mode);
}

fopen využití smyčcových příznaky, jako jsou r, w, aa +a vrací ukazatel souboru používaný s fgets , fputs a fclose .

režimu

Volitelné a relevantní pouze při vytváření nového souboru, definuje oprávnění souboru . Patří mezi ně čtení, zápis nebo spuštění souboru vlastníkem, skupinou nebo všemi uživateli. Režim je maskován umask volajícího procesu : bity nastavené v umask jsou vymazány v režimu.

Viz také

Poznámky

Reference

  • Pokročilé programování v prostředí UNIX od W. Richarda Stevense ISBN  81-7808-096-6
  • Koncept a aplikace UNIX od Sumitabh Das