další předchozí obsah
Další: Souborový vstup a výstup Předchozí: Uživatelské základy

  Programátorské základy unixu





Úvod

V této kapitole si něco povíme o tom, jak jsou některé věci pro programátora zjednodušeny tzv. unifikací, jaké jsou problémy pro programátory se standardizací a dále si vyložíme některé základní pojmy z oblasti systému souborů, na které navážeme v další kapitole.



Jednotné prostředí systému unix

Základem jednotného prostředí systému unix je myšlenka existence jednotného základního programovacího jazyka, kterým je jazyk C. Programy tedy tvoříme v jazyku C, přičemž využíváme služeb jádra systému unix. Na tomto základě dosáhneme snadné přenosnosti programů (na úrovni zdrojových textů), neodstraníme tím však závislost programu na používaných výstupních zařízeních. Odstínění této závislosti lze však provést tak, že použijeme tzv. unifikované služby pro výstup. A až při spuštění programu stanovíme konkrétní výstupní zařízení.

V systému unix jde unifikace ještě dále -- jádro skrývá rozdíl mezi používáním souborů a vnějších zařízení. Prostředí programu v rámci systému unix tvoří proto výhradně soubory. Některé soubory lze pouze číst (z vstupních zařízení např. klávesnice), do některých lze pouze zapisovat (z výstupních zařízení např. tiskárna), z dalších lze číst a do nich zapisovat, třeba i zárověň (např. zvuková karta).

Vnější zařízení jsou chápána pouze jako speciální soubory, které jsou umístěny většinou v adresáři /dev. Pro ilustraci následujících vět je dobré vyzkoušet příkaz ls -l /dev. Speciální soubory jsou buď blokově (např. pevný disk) nebo znakově orientované (např. tiskárna). Každý takový soubor má majoritní a minoritní číslo, které odkazují na příslušný řadič v jádře.

Nutno podotknout, že soubory v adresáři /dev jsou v každém unixu jinak pojmenované.



Standardizace

Již od roku 1980 jsou snahy o sjednocení rozvíjejících se unixů. Tyto snahy se postupně realizují v různé standardy. Zde si povíme o těch hlavních, které ovlivňují práci programátora.



ANSI C

Snahou normy ANSI C (byla uznána jako mezinárodní standard v roce 1990) je nabídnout přenositelnost programů v jazyce C na různé operační systémy, tedy nejen na unixy. Není zde definována pouze syntaxe a sémantika jazyka C, ale i knihovna standardních funkcí. Prototypy těchto funkcí jsou v 15 hlavičkových souborech -- viz též tab. 6.



POSIX

IEEE POSIX je rodina norem, která se od svého vzniku kolem roku 1988 zatím stále rozvíjí. Formální název pro POSIX je Portable Operating System Interface for Computer Environment.

POSIX vychází sice z Unixu (hlavně ze Systemu V a BSD), ale sám to není operační systém. POSIX pouze definuje, jak spolu komunikuje aplikace a operační systém.

Pokud chcete psát aplikace přenositelné na největší množství hardwaru a operačních systémů, je POSIX způsob, jak toho dosáhnout.

Pro představu zde uvedeme některé členy rodiny POSIX:

POSIX.1
je jakousi hlavou rodiny. Definuje komunikaci mezi aplikací a operačním systémem. Původně byl psán v termínech jazyka C, ale později byl přepsán nezávisle na programovacím jazyku. Interpretaci POSIX.1 právě pro jazyk C se lze dovědět z POSIX.16.

POSIX.2
definuje jazyk shellu. Historicky opět vychází z Unixu, hlavně ze C-shellu a Korn Shellu. Nabízí také přes 70 příkazů, které lze volat z shellu. Rozšířená norma POSIX.2a přidává dalších asi 35 dalších utilit, jako editor vi, more, man, mailx atd., aby se uživatel, přecházející ze systému na systém, nemusel učit obsluhovat stále nové a nové programy.

POSIX.3
nabízí testy a ověřování, zda daný operační systém splňuje normy dle rodiny POSIX.

POSIX.4
obsahuje rozšíření pro práci v reálné čase. POSIX.4a přidává funkce na podporu vláken (threads) -- procesů lehké váhy. Vlákna nacházejí uplatnění hlavně v poslední době, kdy se stále častěji používají víceprocesorové systémy.

POSIX.7
hodlá sjednotit administraci systémů. Tato část rodiny je teprve v plenkách a bude pravděpodobně ještě velmi dlouho trvat, než vyspěje na dospělého člena rodiny POSIX.



XPG3

XPG3 je zkratka X/Open Portability Guide, Issue 3 (1989). X/Open je mezinárodní skupina počítačových prodejců. XPG3 např. definuje některé věci, které ještě nejsou v POSIXu, viz tabulku 6.

 

Hlavičky ANSI C POSIX.1 XPG3 Popis
<assert.h> o ověřuje asertivitu
<cpio.h> o archiv cpio
<ctype.h> o typy znaků
<dirent.h> o o položky adresáře
<errno.h> o chybové kódy
<fcntl.h> o o ovládání souborů
<float.h> o konstanty v plovoucí čárce
<ftw.h> o procházení stromu souborů
<grp.h> o o soubor skupin
<langinfo.h> o jazykové informace
<limits.h> o konstanty implementace
<locale.h> o lokální kategorie
<math.h> o matematické konstanty
<nl_types.h> o katalogy zpráv
<pwd.h> o o soubor hesel
<regex.h> o regulární výrazy
<search.h> o vyhledávací tabulky
<setjmp.h> o nelokální goto
<signal.h> o signály
<stdarg.h> o seznamy argumentů
<stddef.h> o standardní definice
<stdio.h> o standardní I/O
<stdlib.h> o pomocné funkce
<string.h> o operace s řetězci
<tar.h> o archiv tar
<termios.h> o o terminálové I/O
<time.h> o čas a datum
<ulimit.h> o uživatelská omezení
<unistd.h> o o symbolické konstanty
<utime.h> o o časy souborů
<sys/ipc.h> o IPC
<sys/msg.h> o fronty
<sys/sem.h> o semafory
<sys/shm.h> o sdílená paměť
<sys/stat.h> o o status souboru
<sys/times.h> o o časy procesů
<sys/types.h> o o primitivní datové typy
<sys/utsname.h> o o jméno systému
<sys/wait.h> o o řízení procesů
Tabulka 6: Hlavičkové soubory definované v různých standardech



Soubory a adresáře



Systém souborů

Systém souborů v unixu je tvořen hierarchickým uspořádáním adresářů a souborů. Vše začíná v adresáři, který se jmenuje root a označuje se /.

Adresář je soubor, který obsahuje jednotlivé položky adresáře. Každá položka obsahuje informace o souboru, tj. jméno, velikost, práva, ... (jen logicky, fyzicky je to většinou jinde).



Jména souborů

Jména v adresářích se nazývají jména souborů. Pouze 2 znaky nesmí tvořit jméno souboru, a to / a NULL. Dvě jména se vždy automaticky vytvoří, a to . (tečka) a .. (tečka-tečka). Tyto soubory slouží pro odkaz na sebe a na svého rodiče.



Cesta

Sekvence několika jmen souborů oddělených lomítky se nazývá cesta. Cesta začínající / se nazývá absolutní cesta, jinak se jedná o cestu relativní.



Pracovní adresář

Každý proces má pracovní adresář. Pracovní adresář je takový adresář, ke kterému se vztahují relativní jména cest.



Domovský adresář

Domovský adresář je adresář, v němž se nacházíme ihned po přihlášení. Náš domovský adresář je uveden v souboru /etc/passwd.



Deskriptory souborů

Jádro se na všechny otevřené soubory odkazuje pomocí deskriptorů (popisovačů). Deskriptor je nezáporný malý integer. Jestliže chcete do souboru zapisovat nebo z něj číst, musíte soubor nejdříve vytvořit nebo otevřít. V unixu jsou některé deskriptory rezervovány.



Cvičení

  1. Ověřte na vašem systému, že adresáře tečka a tečka-tečka nejsou stejné, kromě kořenového adresáře.
  2. Pokud je kalendář uložen ve 32-bitovém integeru, kdy přeteče?
  3. Pokud je čas trvání procesu uložen ve 32-bitovém integeru a počítá-li systém 100 tiků za sekundu, po kolika dnech hodnota přeteče?


další předchozí obsah
Další: Souborový vstup a výstup Předchozí: Uživatelské základy

Ladislav Dobias
Sat Nov 1 15:38:32 MET 1997