Operační systém UNIX a jazyk C

Jan Brodský
Luděk Skočovský

SNTL Nakladatelství technické literatury Praha 1989, ISBN 80-03-00049-1

Obsah



Předmluva..............................................13

1  Úvod................................................15
1.1  Charakteristika Unixu.............................15
1.2  Potřebné technické vybavení.......................16
1.3  Uživatelé a terminál..............................17
1.4  Ovládání terminálu................................18
1.5  Formát příkazů....................................19

2  Systém souborů a adresářů...........................21
2.1  Úvod..............................................21
2.2  Jména souborů.....................................22
2.3  Obyčejné soubory..................................22
2.3.1  Textové soubory.................................23
2.3.2  Binární soubory.................................23
2.3.3  Určení obsahu souboru...........................24
2.3.4  Práce se soubory................................24
2.3.5  Výpis obsahu souborů............................26
2.4  Expanzní znaky....................................28
2.5  Adresáře..........................................28
2.5.1  Úplná jména souborů.............................28
2.5.2  Domovský a pracovní adresář, neúplné jméno......30
2.5.3  Změna pracovního adresáře.......................31
2.5.4  Zkrácená jména..................................32
2.5.5  Násobné odkazy na soubor........................32
2.5.6  Vytváření a rušení adresářů.....................34
2.6  Práce s adresáři..................................36
2.7  Ochrana souborů...................................38
2.7.1  Skupiny uživatelů...............................38
2.7.2  Přístupová práva................................39
2.7.3  Změny přístupových práv.........................41
2.7.4  Změny vlastníka a skupiny.......................42
2.8  Speciální soubory.................................43
2.8.1  Typy zařízení...................................43
2.8.2  Svazky..........................................44
2.8.3  Připojení a odpojení svazků.....................45
2.8.4  Vytváření a rušení speciálních souborů..........46
2.9  Archivace souborů.................................47

3  Ovládání Unixu z terminálu..........................50
3.1  Proces............................................50
3.1.1  Vytváření a evidence procesů....................50
3.1.2  Terminálové procesy.............................51
3.2  Vlastnosti terminálu..............................52
3.2.1  Další speciální znaky...........................52
3.2.2  Změna vlastností terminálu......................53
3.2.3  Možnosti ovládání terminálu.....................54
3.3  Standardní soubory procesu, přesměrování..........55
3.4  Filtr, roura, kolona, démon.......................58
3.5  Kombinace příkazů.................................60
3.6  Shell jako příkaz, nové příkazy...................63
3.7  Propůjčení identifikace...........................66

4  Editory.............................................67
4.1  Interaktivní řádkový editor ed....................67
4.1.1  Aktivace editoru................................67
4.1.2  Vstup, výstup editovaného textu.................67
4.1.3  Adresace řádku..................................69
4.1.4  Vkládání textu..................................72
4.1.5  Změny textu.....................................73
4.1.6  Globální příkazy................................75
4.1.7  Ostatní příkazy.................................76
4.1.8  Neinteraktivní použití příkazu ed...............76
4.2  Neinteraktivní editor sed.........................77
4.2.1  Aktivace........................................77
4.3  Obrazovkový režim editoru ex (vi).................79

5  Programovací jazyk C................................80
5.1  Úvod do jazyka C .................................80
5.1.1  Základní typy...................................80
5.1.2  Odvozené typy...................................81
5.1.3  Konstanty, operátory, výrazy....................83
5.1.4  Příkazy.........................................85
5.1.5  Program, funkce.................................86
5.1.6  Změna typu výrazu...............................87
5.1.7  Textový makroprocesor...........................89
5.2  Objekty...........................................89
5.2.1  Lexikální elementy..............................89
5.2.2  Konstanty a řetězce.............................90
5.2.3  Třídy objektů...................................92
5.2.4  Typy objektů....................................92
5.3  Výrazy............................................93
5.3.1  Obecná pravidla.................................93
5.3.2  Primární výrazy.................................94
5.3.3  Unární operátory................................96
5.3.4  Multiplikativní operátory.......................97
5.3.5  Aditivní operátory..............................98
5.3.6  Operátory posuvů................................99
5.3.7  Relační operátory, operátory rovnosti...........99
5.3.8  Bitové logické operátory.......................100
5.3.9  Logické operátory..............................100
5.3.10 Podmíněný operátor.............................101
5.3.11 Přiřazovací operátory..........................101
5.3.12 Operátor čárky.................................102
5.4  Deklarace........................................102
5.4.1  Strutura deklarací.............................102
5.4.2  Deklarace elementárních objektů................103
5.4.3  Struktury a unie...............................104
5.4.4  Výčtový typ....................................107
5.4.5  Inicializace...................................107
5.4.6  Externí definice funkcí a dat..................108
5.4.7  Lexikální rozsah platnosti.....................109
5.4.8  Návaznost externích objektů....................110
5.5  Příkazy..........................................112
5.5.1  Prázdný příkaz, výrazový příkaz................112
5.5.2  Složený příkaz bloku...........................112
5.5.3  Podmíněný příkaz...............................113
5.5.4  Cykly while a do...............................114
5.5.5  Cyklus for.....................................115
5.5.6  Přepínač, příkaz break.........................116
5.5.7  Příkaz continue................................117
5.6  Funkce a jejich volání...........................118
5.6.1  Mechanismus volání a návratu...................118
5.6.2  Skutečné argumenty.............................119
5.6.3  Rekurzivita funkcí.............................121
5.6.4  Příkaz goto, návěští...........................121
5.7  Textový makroprocesor............................122
5.7.1  Náhrada identifikátorů.........................122
5.7.2  Makra..........................................123
5.7.3  Podmíněný překlad..............................123
5.7.4  Vkládání souborů...............................124
5.7.5  Příkaz #line...................................124
5.8  Kompilace programu...............................124
5.8.1  Kompilátor cc..................................125
5.8.2  Volby kompilátoru..............................126
5.8.3  Sestavující program, aktivace programu.........127
5.9  Knihovny.........................................127
5.9.1  Knihovny a vkládané soubory....................128
5.9.2  Standardní knihovna vstupů a výstupů...........129
5.9.3  Činnost jednotlivých funkcí....................130
5.9.4  Formáty........................................132
5.9.5  Knihovna curses................................133
5.10 Výhledy jazyka C.................................136

6  Programování v systému.............................138
6.1  Volání jádra.....................................138
6.1.1  Úrovně služeb..................................138
6.1.2  Chybové návraty................................138
6.2  Procesy a jejich synchronizace...................140
6.2.1  Atributy procesů...............................140
6.2.2  Stavy procesu..................................140
6.2.3  Vznik a zánik procesů..........................142
6.2.4  Signály........................................143
6.2.5  Adresový prostor procesu.......................146
6.2.6  Užívání prostředků systému.....................148
6.2.7  Rodiny procesů.................................150
6.2.8  Vlastnictví procesů a jejich přístupová práva..151
6.3  Vstupní a výstupní operace.......................153
6.3.1  Práce se soubory...............................153
6.3.2  Datové operace.................................155
6.3.3  Řídicí operace.................................157
6.3.4  Roura..........................................158
6.3.5  Zjišťování informací o souboru.................159
6.3.6  Zmněna vlastností souborů a adresářů...........160
6.3.7  Práce se svazky................................160
6.3.8  Volání globálního charakteru...................161
6.3.9  Profil programu................................162
6.4  Nástroje tvorby programů.........................164
6.4.1  Přístup programátora...........................164
6.4.2  Programovací jazyky............................168
6.4.3  Kontrola programů v jazyku C (lint)............169
6.4.4  Ladící prostředek adb..........................170
6.4.5  Ladící program sdb.............................174
6.4.6  Rozsáhlé programy - make.......................177
6.4.7  Údržba zdrojových textů - SCCS.................181

7  Příkazové interprety...............................183
7.1  Shell............................................183
7.1.1  Interpretace příkazů...........................183
7.1.2  Speciální znaky a expanzní znaky...............185
7.1.3  Příkazové soubory..............................187
7.1.4  Proměnné shellu................................187
7.1.5  Prostředí uživatele a procesu..................188
7.1.6  Argumenty scénářů..............................190
7.1.7  Programování...................................190
7.1.8  Rekurzívní shell...............................195
7.1.9  Příkazy break a continue.......................197
7.1.10 Další příkazy..................................198
7.1.11 Adresář /tmp...................................200
7.1.12 Vstup z textu scénáře..........................200
7.1.13 Ladění scénářů.................................201
7.2  Příkazový interpret C-shell (csh)................202
7.2.1  Start interpretu...............................202
7.2.2  Přesměrování vstupu a výstupu..................203
7.2.3  Řízení prací...................................204
7.2.4  Mechanismus historie (history).................206
7.2.5  Mechanismus záměn..............................209
7.2.6  Proměnné.......................................210
7.2.7  Programování...................................213
7.2.8  Příkazové procedury............................216
7.2.9  C-shell v praxi................................217
7.3  Příkazový interpret Visual shell (vsh)...........218

8  Zpracování textů...................................219
8.1  Práce s textovými soubory........................219
8.1.1  Tisk obsahu souboru (pr, lpr)..................219
8.1.2  Jednoduché práce...............................220
8.1.3  Setřídění a porovnání..........................222
8.1.4  Textové řetězce................................225
8.1.5  Šifrování (crypt)..............................227
8.2  Programovatelné manipulace s textem..............227
8.2.1  Struktura programu.............................228
8.2.2  Struktura vstupu z pohledu awk.................228
8.2.3  Vzorek.........................................228
8.2.4  Akce...........................................230
8.2.5  Vnitřní proměnné...............................231
8.2.6  Vnitřní funkce.................................231
8.2.7  Tok řízení.....................................232
8.3  Formátování textů................................233
8.3.1  Základní direktivy.............................233
8.3.2  Formát stránky.................................235
8.3.3  Doplňování a zarovnávání.......................237
8.3.4  Výstavba maker.................................239
8.3.5  Argumenty maker................................240
8.3.6  Registry.......................................241
8.3.7  Podmíněné formátování..........................243
8.3.8  Další direktivy................................244
8.3.9  Speciální znaky................................246
8.3.10 Knihovny maker.................................246
8.3.11 Filtr col......................................248
8.4  Sémantické akce s textovými soubory..............248
8.5  Speciální formátování............................250
8.5.1  Vytváření tabulek..............................250
8.5.2  Matematické vzorce (eqn, neqn).................252

9  Komunikace mezi uživateli..........................254
9.1  Komunikace v rámci jednoho operačního systému....254
9.1.1  Rozhovor.......................................254
9.1.2  Elektronická pošta.............................256
9.1.3  Provedení příkazu v určitém čase...............258
9.1.4  Kalendář.......................................259
9.2  Počítačové sítě..................................259
9.2.1  Základní vybavení (uucp).......................260
9.2.2  Další vybavení.................................261
9.3  Kermit...........................................262
9.3.1  Emulace terminálu..............................262
9.3.2  Přenos souborů.................................264

10 Implementace.......................................266
10.1 Struktura jádra..................................266
10.2 Správa procesů...................................267
10.2.1 Adresové prostory procesy......................267
10.2.2 Sdílitelné texty programů......................268
10.2.3 Evidence procesů a textů programů..............268
10.2.4 Přidělování paměti.............................271
10.2.5 Synchronizace a plánování......................271
10.2.6 Odkládání na disk..............................272
10.3 Ovládání periferních zařízení....................273
10.3.1 Reprezentace periferních zařízení..............273
10.3.2 Blokové zařízení a vyrovnávací paměti..........274
10.3.3 Implementace blokových operací.................276
10.3.4 Znakové zařízení a vyrovnávací paměti..........276
10.3.5 Ovládání terminálů.............................277
10.3.6 Ovládače.......................................279
10.4 Svazky a soubory.................................282
10.4.1 Struktura svazku...............................282
10.4.2 Seznam volných bloků...........................283
10.4.3 Diskové i-uzly.................................284
10.4.4 Datové bloky souborů...........................285
10.4.5 Adresáře a připojitelné svazky.................286
10.5 Proces a soubory.................................288
10.5.1 Evidence otevřených souborů....................289
10.5.2 Práce se soubory...............................289
10.5.3 Implementace datových operací..................291
10.6 Implementace roury...............................291
10.7 Proudy...........................................292

11 Instalace a údržba.................................297
11.1 Instalace........................................297
11.1.1 Distribuční magnetická páska...................297
11.1.2 Instalace z distribuční pásky..................298
11.1.3 Distribuční diskety - formát...................301
11.1.4 Instalace z disket.............................302
11.1.5 Dokumentace....................................302
11.1.6 Formátování svazků.............................303
11.2 Provoz systému...................................304
11.2.1 Zastavení víceuživatelského režimu.............306
11.2.2 Připojení nového uživatele.....................307
11.2.3 Mechanismus démonů.............................308
11.2.4 Obsah adresářů.................................310
11.3 Regenerace.......................................313
11.3.1 Regenerace jádra ze zdrojových textů...........313
11.3.2 Připojení nového zařízení......................314
11.3.3 Regenerace ostatního programového vybavení.....314
11.4 Údržba...........................................315
11.4.1 Archivace svazků...............................315
11.4.2 Archivace systémového svazku...................316
11.4.3 Archivace ostatních svazků.....................317
11.4.4 Údržba svazků..................................318
11.4.5 Programy icheck a dcheck.......................320
11.4.6 Program fsck...................................322
11.4.7 Havárie systému................................324
11.5 Chybové zprávy systému...........................324
11.5.1 Chyby zařízení.................................324
11.5.2 Vnitřní chyby systému..........................325
11.5.3 Zprávy o havárii systému.......................325

12 Přenositelnost Unixu...............................327
12.1 Přenositelnost obecně............................327
12.2 Projekt přenositelného Unixu.....................328
12.3 Přenositelnost a jazyk C.........................328
12.4 Přenositelnost a jádro...........................330
12.4.1 Přerušení......................................330
12.4.2 Návaznost jádra na proces......................331
12.5 Ovládače.........................................333
12.6 Obsluha volání jádra.............................334
12.7 Závěr............................................334

A  Syntaxe jayka C....................................335
A.1  Lexikální gramatika..............................335
A.1.1  Lexikální elementy.............................335
A.1.2  Klíčová slova..................................335
A.1.3  Identifikátory.................................336
A.1.4  Konstanty......................................336
A.1.5  Řetězec........................................338
A.1.6  Operátory......................................338
A.1.7 Interpunkce.....................................339
A.2  Frázová gramatika................................339
A.2.1  Výrazy.........................................339
A.2.2  Deklarace......................................341
A.2.3  Příkazy........................................344
A.2.4  Externí definice...............................345
A.3  Makroprocesor....................................346

B  Abecední přehled příkazů shellu....................348

C  Volání jádra.......................................356

D  Knihovny Unixu.....................................358

Literatura............................................356