dalsi predchozi obsah
Dalsi: Souborovy vstup a vystup Predchozi: Uzivatelske zaklady

  Programatorske zaklady unixu





Uvod

V teto kapitole si neco povime o tom, jak jsou nektere veci pro programatora zjednoduseny tzv. unifikaci, jake jsou problemy pro programatory se standardizaci a dale si vylozime nektere zakladni pojmy z oblasti systemu souboru, na ktere navazeme v dalsi kapitole.



Jednotne prostredi systemu unix

Zakladem jednotneho prostredi systemu unix je myslenka existence jednotneho zakladniho programovaciho jazyka, kterym je jazyk C. Programy tedy tvorime v jazyku C, pricemz vyuzivame sluzeb jadra systemu unix. Na tomto zaklade dosahneme snadne prenosnosti programu (na urovni zdrojovych textu), neodstranime tim vsak zavislost programu na pouzivanych vystupnich zarizenich. Odstineni teto zavislosti lze vsak provest tak, ze pouzijeme tzv. unifikovane sluzby pro vystup. A az pri spusteni programu stanovime konkretni vystupni zarizeni.

V systemu unix jde unifikace jeste dale -- jadro skryva rozdil mezi pouzivanim souboru a vnejsich zarizeni. Prostredi programu v ramci systemu unix tvori proto vyhradne soubory. Nektere soubory lze pouze cist (z vstupnich zarizeni napr. klavesnice), do nekterych lze pouze zapisovat (z vystupnich zarizeni napr. tiskarna), z dalsich lze cist a do nich zapisovat, treba i zaroven (napr. zvukova karta).

Vnejsi zarizeni jsou chapana pouze jako specialni soubory, ktere jsou umisteny vetsinou v adresari /dev. Pro ilustraci nasledujicich vet je dobre vyzkouset prikaz ls -l /dev. Specialni soubory jsou bud blokove (napr. pevny disk) nebo znakove orientovane (napr. tiskarna). Kazdy takovy soubor ma majoritni a minoritni cislo, ktere odkazuji na prislusny radic v jadre.

Nutno podotknout, ze soubory v adresari /dev jsou v kazdem unixu jinak pojmenovane.



Standardizace

Jiz od roku 1980 jsou snahy o sjednoceni rozvijejicich se unixu. Tyto snahy se postupne realizuji v ruzne standardy. Zde si povime o tech hlavnich, ktere ovlivnuji praci programatora.



ANSI C

Snahou normy ANSI C (byla uznana jako mezinarodni standard v roce 1990) je nabidnout prenositelnost programu v jazyce C na ruzne operacni systemy, tedy nejen na unixy. Neni zde definovana pouze syntaxe a semantika jazyka C, ale i knihovna standardnich funkci. Prototypy techto funkci jsou v 15 hlavickovych souborech -- viz tez tab. 6.



POSIX

IEEE POSIX je rodina norem, ktera se od sveho vzniku kolem roku 1988 zatim stale rozviji. Formalni nazev pro POSIX je Portable Operating System Interface for Computer Environment.

POSIX vychazi sice z Unixu (hlavne ze Systemu V a BSD), ale sam to neni operacni system. POSIX pouze definuje, jak spolu komunikuje aplikace a operacni system.

Pokud chcete psat aplikace prenositelne na nejvetsi mnozstvi hardwaru a operacnich systemu, je POSIX zpusob, jak toho dosahnout.

Pro predstavu zde uvedeme nektere cleny rodiny POSIX:

POSIX.1
je jakousi hlavou rodiny. Definuje komunikaci mezi aplikaci a operacnim systemem. Puvodne byl psan v terminech jazyka C, ale pozdeji byl prepsan nezavisle na programovacim jazyku. Interpretaci POSIX.1 prave pro jazyk C se lze dovedet z POSIX.16.

POSIX.2
definuje jazyk shellu. Historicky opet vychazi z Unixu, hlavne ze C-shellu a Korn Shellu. Nabizi take pres 70 prikazu, ktere lze volat z shellu. Rozsirena norma POSIX.2a pridava dalsich asi 35 dalsich utilit, jako editor vi, more, man, mailx atd., aby se uzivatel, prechazejici ze systemu na system, nemusel ucit obsluhovat stale nove a nove programy.

POSIX.3
nabizi testy a overovani, zda dany operacni system splnuje normy dle rodiny POSIX.

POSIX.4
obsahuje rozsireni pro praci v realne case. POSIX.4a pridava funkce na podporu vlaken (threads) -- procesu lehke vahy. Vlakna nachazeji uplatneni hlavne v posledni dobe, kdy se stale casteji pouzivaji viceprocesorove systemy.

POSIX.7
hodla sjednotit administraci systemu. Tato cast rodiny je teprve v plenkach a bude pravdepodobne jeste velmi dlouho trvat, nez vyspeje na dospeleho clena rodiny POSIX.



XPG3

XPG3 je zkratka X/Open Portability Guide, Issue 3 (1989). X/Open je mezinarodni skupina pocitacovych prodejcu. XPG3 napr. definuje nektere veci, ktere jeste nejsou v POSIXu, viz tabulku 6.

 

Hlavicky ANSI C POSIX.1 XPG3 Popis
<assert.h> o overuje asertivitu
<cpio.h> o archiv cpio
<ctype.h> o typy znaku
<dirent.h> o o polozky adresare
<errno.h> o chybove kody
<fcntl.h> o o ovladani souboru
<float.h> o konstanty v plovouci carce
<ftw.h> o prochazeni stromu souboru
<grp.h> o o soubor skupin
<langinfo.h> o jazykove informace
<limits.h> o konstanty implementace
<locale.h> o lokalni kategorie
<math.h> o matematicke konstanty
<nl_types.h> o katalogy zprav
<pwd.h> o o soubor hesel
<regex.h> o regularni vyrazy
<search.h> o vyhledavaci tabulky
<setjmp.h> o nelokalni goto
<signal.h> o signaly
<stdarg.h> o seznamy argumentu
<stddef.h> o standardni definice
<stdio.h> o standardni I/O
<stdlib.h> o pomocne funkce
<string.h> o operace s retezci
<tar.h> o archiv tar
<termios.h> o o terminalove I/O
<time.h> o cas a datum
<ulimit.h> o uzivatelska omezeni
<unistd.h> o o symbolicke konstanty
<utime.h> o o casy souboru
<sys/ipc.h> o IPC
<sys/msg.h> o fronty
<sys/sem.h> o semafory
<sys/shm.h> o sdilena pamet
<sys/stat.h> o o status souboru
<sys/times.h> o o casy procesu
<sys/types.h> o o primitivni datove typy
<sys/utsname.h> o o jmeno systemu
<sys/wait.h> o o rizeni procesu
Tabulka 6: Hlavickove soubory definovane v ruznych standardech



Soubory a adresare



System souboru

System souboru v unixu je tvoren hierarchickym usporadanim adresaru a souboru. Vse zacina v adresari, ktery se jmenuje root a oznacuje se /.

Adresar je soubor, ktery obsahuje jednotlive polozky adresare. Kazda polozka obsahuje informace o souboru, tj. jmeno, velikost, prava, ... (jen logicky, fyzicky je to vetsinou jinde).



Jmena souboru

Jmena v adresarich se nazyvaji jmena souboru. Pouze 2 znaky nesmi tvorit jmeno souboru, a to / a NULL. Dve jmena se vzdy automaticky vytvori, a to . (tecka) a .. (tecka-tecka). Tyto soubory slouzi pro odkaz na sebe a na sveho rodice.



Cesta

Sekvence nekolika jmen souboru oddelenych lomitky se nazyva cesta. Cesta zacinajici / se nazyva absolutni cesta, jinak se jedna o cestu relativni.



Pracovni adresar

Kazdy proces ma pracovni adresar. Pracovni adresar je takovy adresar, ke kteremu se vztahuji relativni jmena cest.



Domovsky adresar

Domovsky adresar je adresar, v nemz se nachazime ihned po prihlaseni. Nas domovsky adresar je uveden v souboru /etc/passwd.



Deskriptory souboru

Jadro se na vsechny otevrene soubory odkazuje pomoci deskriptoru (popisovacu). Deskriptor je nezaporny maly integer. Jestlize chcete do souboru zapisovat nebo z nej cist, musite soubor nejdrive vytvorit nebo otevrit. V unixu jsou nektere deskriptory rezervovany.



Cviceni

  1. Overte na vasem systemu, ze adresare tecka a tecka-tecka nejsou stejne, krome korenoveho adresare.
  2. Pokud je kalendar ulozen ve 32-bitovem integeru, kdy pretece?
  3. Pokud je cas trvani procesu ulozen ve 32-bitovem integeru a pocita-li system 100 tiku za sekundu, po kolika dnech hodnota pretece?


dalsi predchozi obsah
Dalsi: Souborovy vstup a vystup Predchozi: Uzivatelske zaklady

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