Deskriptor souboru

Deskriptor souboru (též popisovač souboru nebo souborový deskriptor, anglicky file descriptor) je v informatice abstraktní klíč (prakticky vždy celé číslo), který se svěřuje procesům za účelem identifikace otevřeného souboru či jiného datového proudu, např. roury nebo soketu, při používání systémových volání (vstupech operačního systému do činnosti programu). Identifikátor se tak jako parametr volání funkce předává v každém požadavku na čtení, zápis nebo uzavření.

Pojmenování je příznačné zejména pro unixové operační systémy, vycházející ze standardu POSIX. Terminologie konkurenčních systémů Windows firmy Microsoft dává přednost názvu file handle; handle je přitom označení pro identifikátor jakéhokoli objektu v operačním systému, přívlastek file upřesňuje, že se jedná o proud — entitu, s níž lze provádět vstupně-výstupní operace.

Implementace

Generace dílčích hodnot pro souborové deskriptory je typicky oddělená pro každý proces. Deskriptor tak nemá globální význam — operační systém jej musí vztahovat ke konkrétnímu procesu.

S každým přiřazením souborového deskriptoru si operační systém poznamenává, že k tomuto úkonu došlo. S vlastním identifikátorem nesvazuje pouze datový proud, nýbrž také vlastnosti vytvořeného komunikačního kanálu. Pevné zastoupení mezi těmito má směr komunikace (čtení, zápis, čtení i zápis), obvyklé další položky jsou údaj o tom, zda vstupně-výstupní operace mají být uskutečňovány v blokovacím, nebo neblokovacím režimu, a informace, zda je možno pracovat s tzv. souborovým ukazatelem, resp. se při čtení nebo zápisu vracet.

Je-li zařízením soubor ve vnější paměti, kupř. na pevném disku, častým vedlejším efektem držení deskriptoru, především při otevření pro zápis, je bránění operačním systémem ve smazání či přejmenování tohoto souboru. V případě prostředku, jenž není adresovatelný v souborovém systému, např. roury nebo soketu, je naproti tomu událost uzavření posledního přiděleného deskriptoru podnětem k odstranění tohoto prostředku (jeho datových struktur) z paměti.

Rodiny operačních systémů se stran souborových deskriptorů liší v počtu sad příslušných systémových volání. Zatímco unixová architektura se snaží se všemi částmi operačního systému zacházet jako se soubory nebo procesy (důraz na co největší abstrakci), pravděpodobně nejvlivnější představitel odlišné filozofie — společnost Microsoft — jde spíše cestou specializovaných funkcí. Nakládání s vnější pamětí a interprocesní komunikace ovšem mají svá podstatná specifika — soubor ve vnější paměti je zařízením blokovým a blokování v jeho obsluze je takřka bezpředmětné, roura a soket jsou znaková zařízení a blokovací mód reprezentuje výchozí způsob práce s nimi.

Deskriptory standardních proudů

Norma POSIX, spolu s níž byl pojem zaveden a která operační systémy zavazuje deskriptory vyjadřovat celými čísly, vedle souborového deskriptoru jakožto rozhraní definuje trojici deskriptorů pro obsluhu tzv. standardních proudů: standardní vstup, standardní výstup a standardní chybový výstup (anglicky stdin, stdout, stderr). Tyto popisovače zpravidla mají hodnoty 0, 1, 2 (v uvedeném pořadí) a charakteristické jsou tím, že jsou implicitně otevřené.

Související informace naleznete také v článku Standardní proudy.

Související články