|
Linux-Programmierung
Neil Matthew, Richard Stones
mitp-Verlag
EAN: 9783826605697 (ISBN: 3-8266-0569-1)
888 Seiten, paperback, 18 x 24cm, 2000
EUR 50,00 alle Angaben ohne Gewähr
|
|
Umschlagtext
Wenn Sie Linux installiert oder Zugriff auf eine UNIX-Version haben, sind Sie vielleicht bereits
vertraut mit der Umgebung und deren Konfiguration. Wenn Sie mit der Programmierung beginnen
möchten, lassen die meisten Linux-Bücher Sie jedoch im Regen stehen. Dieses Buch beginnt dort,
wo andere aufhören. Sie erfahren, wie Sie aus den von UNIX angebotenen Tools (die
standardmäßig in allen Linux-Distributionen vorhanden sind) den größten Nutzen ziehen können,
um mit echter UNIX-Programmierung zu beginnen.
Die Autoren konzentrieren sich auf die C-Programmierung und untersuchen die CNU-Tools sowie
die UNIX-C-Bibliothek. Dabei erlernen Sie in wohldurchdachten Schritten, wie Sie einen
zweckmäßigen Applikationscode schreiben, aufbauen und debuggen. Im Verlaufe dieses Buches
entwickeln Sie mit den Autoren eine voll funktionsfähige CD-Datenbankanwendung, in der die in
der Theorie erläuterten Aspekte praktisch umgesetzt werden. Sie lernen die grundlegenden
Dateioperationen, Ein- und Ausgabefunktionen und die Verwaltung von Daten unter UNIX kennen.
Darüber hinaus erhalten Sie eine Einführung in tiefergehende Themen. Dazu zählen
Interprozesskommunikation, Netzwerkbetrieb und die Verwendung von CGI-Skripten für den
Aufbau einer Web-Schnittstelle - sämtliche Elemente für ein die Client/Server-Programmierung. Des
Weiteren wird Ihnen das CTK-Tookit vorgestellt, und Sie erfahren, wie Sie mit GNOME grafische
Oberflächen für X erstellen können. Schließlich werden Ihnen Einblicke in die Programmierung von
Gerätetreibern vermittelt, durch die Sie die Funktionsweise des Linux-Kernels selbst besser
verstehen können.
Die Programmierung von Shell-Skripten mit der Bash-Shell darf ebenso wenig fehlen wie die
Vorstellung zwei weitere, sehr leistungsfähiger Skriptsprachen, Tel und Perl.
An wen wendet sich dieses Buch?
Sie sollten mit den Grundlagen von Linux vertraut sein und umfassendes, praktisches Wissen über die
Konfiguration des Systems besitzen. Darüber hinaus sind grundlegende Programmierkenntnisse von Vorteil.
Wenn Sie mit den Basiskonzepten der Programmierung vertraut sind, erhalten Sie durch die praktischen
Beispiele schnell das Selbstvertrauen zur eigenständigen Erforschung der Linux-C-Bibliotheken.
Die in diesem Buch verwendeten Programmierwerkzeuge sind quasi in jeder Linux-Distribution zu finden.
Für Ihren Start als Linux-Programmierer brauchen Sie daher nicht mehr als dieses Buch.
Verlagsinfo
Dieses Buch ist eine betont praxisorientierte Schritt-für-Schritt-Anleitung für all diejenigen, die einen Einstieg in die vielfältigen Möglichkeiten der Programmierung unter Linux suchen. Werden zunächst die wichtigsten Programmierwerkzeuge wie der GNU C-Compiler, die Linux-Bibliotheken und Hilfedateien vorgestellt, stehen im weiteren Verlauf Themen wie die Shell- und X Windows-, Socket- und Systemprogrammierung sowie das Debugging im Mittelpunkt. Weitere Schwerpunkte bilden Kapitel über die Verwendung von Tcl/Tk unter Linux sowie über die Linux-Internet-Programmierung mit Hilfe von HTML und CGI.
Inhaltsverzeichnis
Inhaltsverzeichnis Einleitung 31
Willkommen 31
Für wen ist dieses Buch? 31
Was steht in diesem Buch? 32
Was Sie wissen sollten 33
Quellcode 34
Konventionen 34
Wir legen Wert auf Ihre Meinung 35
Download-Möglichkeit bei www. mitp. de 35
Kapitel 1: Einführung 37
Was ist UNIX? 37
Was ist Linux? 38
Distributionen 38
Das GNU-Projekt und die Free Software Foundation 38
Linux-Programmierung 39
UNIX-Programme 40
Der C-Compiler 41
So erhalten Sie Hilfe 42
Organisationsplan des Entwicklungssystems 44
Programme 44
Header-Dateien 45
Bibliotheksdateien 46
Statische Bibliotheken 46
Gemeinsam genutzte Bibliotheken 49
Die UNIX-Philosophie 50
Einfachheit 50
Fokus 50
Wiederverwendbare Komponenten 50
Filter 50
Offene Dateiformate 51
Flexibilität 51
Zusammenfassung 51
Kapitel 2: Shell-Programmierung 53
Was ist eine Shell? 54
Pipes und Umleitungen 56
Die Ausgabe umleiten 56
Die Eingabe umleiten 57
Pipes 57
Die Shell als Programmiersprache 57
Interaktive Programme 58
Ein Skript erstellen 59
So wird ein Skript ausführbar 60
Shell-Syntax 61
Variablen 61
Anführungszeichen 62
Umgebungsvariablen 63
Parametervariablen 63
Bedingungen 65
Der Befehl test oder 65
Kontrollstrukturen 67
if 68
elif 68
Ein Problem mit Variablen 69
for 70
while 71
until 73
case 73
Listen 76
Blöcke von Statements 78
Funktionen 78
Befehle 81
break 82
Der Befehl : 82
continue 83
Der Befehl . 84
echo 85
eval 85
exec 86
exit n 86
export 87
expr 87
printf 88
return 89
set 89
shift 90
trap 90
unset 92
Befehlsausführung 93
Arithmetische Expandierung 93
Parameterexpandierung 94
Here-Dokumente 96
Skripte debuggen 98
Alle Aspekte verbinden 98
Anforderungen 99
Entwurf 99
Zusammenfassung 108
Kapitel 3: Mit Dateien arbeiten 109
Die UNIX-Dateistruktur 110
Verzeichnisse 110
Dateien und Geräte 111
/dev/console 111
/dev/tty 111
/dev/null 112
Systemaufrufe und Gerätetreiber 112
Bibliotheksfunktionen 113
Low-Level-Dateizugriff 114
write 114
read 115
open 116
Anfängliche Berechtigungen 117
umask 118
close 119
ioctl 119
Weitere Systemaufrufe für die Dateiverwaltung 121
lseek 121
fstat, stat and lstat 121
dup and dup2 123
Die Standard-I/O-Bibliothek 123
fopen 123
fread 124
fwrite 124
fclose 125
fflush 125
fseek 125
fgetc, getc, getchar 125
fputc, putc, putchar 126
fgets, gets 126
Formatierte Ein- und Ausgabe 126
printf, fprintf and sprintf 126
scanf, fscanf and sscanf 128
Weitere Stream-Funktionen 130
Stream-Fehler 131
Streams und Dateideskriptoren 132
Datei- und Verzeichnispflege 132
chmod 132
chown 132
unlink, link, symlink 133
mkdir, rmdir 133
chdir, getcwd 134
Verzeichnisse durchsuchen 134
opendir 134
readdir 135
telldir 135
seekdir 135
closedir 135
Fehler 138
Fortgeschrittene Themen 139
fcntl 139
mmap 140
Zusammenfassung 142
Kapitel 4: Die UNIX-Umgebung 143
Programmargumente 143
getopt 145
Umgebungsvariablen 147
Umgebungsvariablen verwenden 149
Die Variable environ 150
Uhrzeit und Datum 151
Temporäre Dateien 158
Benutzerinformationen 159
Weitere Benutzerinformationsfunktionen 162
Host-Informationen 162
Lizenzierung 164
Protokollierung 164
Konfigurieren von Protokollen 166
Ressourcen und Beschränkungen 168
Zusammenfassung 173
Kapitel 5: Terminals 175
Lesen vom und Schreiben auf das Terminal 176
Handhabung umgeleiteter Ausgaben 178
Mit dem Terminal sprechen 180
Der Terminal-Treiber und das General Terminal Interface 182
Überblick 182
Hardware-Modell 183
Die Struktur termios 184
Eingabemodi 185
Ausgabemodi 186
Steuermodi 186
Lokale Modi 187
Spezielle Steuerzeichen 187
Zeichen 188
Die Werte TIME und MIN 189
Von der Shell auf die Terminal-Modi zugreifen 189
Von der Kommandozeile Terminal-Modi einrichten 190
Terminal-Geschwindigkeit 191
Zusätzliche Funktionen 191
Terminal-Ausgabe 194
Terminal-Typ 195
Den Terminal-Typ identifizieren 195
Die terminfo-Eigenschaften verwenden 198
Steuerzeichenketten auf das Terminal ausgeben 200
Tastatureingaben erkennen 202
Pseudo-Terminals 205
Zusammenfassung 205
Kapitel 6: Curses 207
Mit curses kompilieren 208
Konzepte 209
Initialisierung und Terminierung 211
Ausgabe auf den Bildschirm 212
Vom Bildschirm lesen 212
Den Bildschirm löschen 213
Den Cursor bewegen 213
Zeichenattribute 214
Die Tastatur 216
Tastaturmodi 216
Tastatureingabe 217
Fenster 218
Die Struktur WINDOW 219
Generalisierte Funktionen 219
Ein Fenster verschieben und aktualisieren 220
Bildschirmaktualisierungen optimieren 224
Unterfenster 224
Keypad 227
Farben 229
Farben neu definieren 231
Pads 231
Die CD-Sammlungs-Anwendung 233
Zusammenfassung 247
Kapitel 7: Datenverwaltung 249
Die Speicherverwaltung 249
Einfache Speicherzuordnung 250
Große Speichermengen zuordnen 251
Speichermissbrauch 254
Der Nullzeiger 255
Den Speicher freigeben 256
Weitere Speicherzuordnungsfunktionen 257
Dateisperrung 258
Sperrdateien erstellen 258
Bereiche sperren 261
Der Befehl F_GETLK 262
Der Befehl F_SETLK 263
Der Befehl F_SETLKW 263
read und write beim Sperren verwenden 263
Konkurrierende Sperrungen 269
Weitere Sperrbefehle 272
Deadlocks 272
Datenbanken 273
Die dbm-Datenbank 273
Die dbm-Routinen 274
dbm-Konzepte 274
dbm-Zugriffsfunktionen 275
dbm_open 275
dbm_store 276
dbm_fetch 276
dbm_close 276
Zusätzliche dbm-Funktionen 279
dbm-delete 279
dbm-error 279
dbm-cleaerr 279
dbm_firstkey und dbm_nextkey 279
Die CD-Anwendung 281
Die CD-Anwendung nutzt dbm 282
Zusammenfassung 299
Kapitel 8: Entwicklungswerkzeuge 301
Probleme bei mehreren Quelldateien 301
Der Befehl make und Makefiles 302
Die Syntax von Makefiles 302
Optionen und Parameter für make 303
Abhängigkeiten 303
Regeln 304
Kommentare in einem Makefile 306
Makros in einem Makefile 306
Mehrere Zielobjekte 308
Integrierte Regeln 310
Suffixregeln 311
Verwalten von Bibliotheken mit make 312
Fortgeschrittenes Thema: Makefiles und Unterverzeichnisse 313
GNU-make und -gcc 314
Quellcodekontrolle 315
RCS 315
Der Befehl rcs 316
Der Befehl ci 316
Der Befehl co 317
Der Befehl rlog 318
Der Befehl rcsdiff 318
Revisionen identifizieren 319
Der Befehl ident 320
SCSS 321
Vergleich RCS und SCCS 321
CVS 322
CVS - Einführung 322
Manual Pages schreiben 326
Software-Distribution 329
Das Programm patch 329
Weitere Distributionswerkzeuge 331
Beschreibung des Befehls tar 333
Zusammenfassung 333
Kapitel 9: Debugging 335
Fehlertypen 335
Spezifikationsfehler 335
Entwurfsfehler 335
Kodierungsfehler 336
Allgemeine Debugging-Techniken 336
Ein Programm mit Bugs 336
Code-Untersuchung 339
Instrumentalisierung 340
Debugging ohne Rekompilierung 341
Kontrollierte Ausführung 342
Debugging mit gdb 343
gdb starten 343
Ein Programm ausführen 344
Stack-Verfolgung 344
Variablen untersuchen 345
Das Programm auflisten 346
Breakpoints einrichten 346
Patching mit dem Debugger 349
Weitere Informationen zu gdb 350
Weitere Debugging-Werkzeuge 351
Lint: Entstauben Ihrer Programme 351
Funktionsaufrufwerkzeuge 352
ctags 352
cxref 352
Cflow 353
Ausführungsprofile 354
prof/gprof 354
Zugesicherte Wertebereiche für ein Programm (Assertions) 355
Probleme mit assert 355
Speicher-Debugging 356
ElectricFence 357
Checker 358
Ressourcen 360
Zusammenfassung 360
Kapitel 10: Prozesse und Signale 361
Was ist ein Prozess? 361
Prozessstruktur 362
Die Prozesstabelle 363
Prozesse anzeigen 363
Systemprozesse 364
Scheduling von Prozessen 365
Neue Prozesse starten 366
Ein Prozess-Image ersetzen 368
Ein Prozess-Image duplizieren 370
Auf einen Prozess warten 372
Zombieprozesse 374
Ein- und Ausgabeumleitung 375
Threads 377
Signale 377
Signale senden 381
Eine robuste Signalschnittstelle 383
Signal-Sets 385
sigaction-Flags 387
Referenz für übliche Signale 388
Zusammenfassung 389
Kapitel 11: Posix-Threads 391
Was ist ein Thread? 391
Vor- und Nachteile von Threads 392
Ist die Unterstützung für Threads gewährleistet? 393
Ein erstes Programm mit Threads 394
Simultane Ausführung 397
Synchronisierung 399
Synchronisierung mit Semaphoren 399
Synchronisierung mit Mutexes 404
Attribute von Threads 407
detachedstate 409
schedpolicy 409
schedparam 409
inheritsched 409
scope 409
stacksize 409
Thread-Attribute - Scheduling 411
Abbrechen eines Threads 412
Threads im Überfluss 415
Zusammenfassung 418
Kapitel 12: Prozesskommunikation: Pipes 419
Was ist eine Pipe? 419
Prozess-Pipes 420
popen 420
pclose 421
Ausgaben an popen senden 422
Größere Datenmengen übergeben 422
Wie popen implementiert ist 424
Der Pipe-Aufruf 425
Über- und untergeordnete Prozesse 428
Aus geschlossenen Pipes lesen 430
Pipes als Standard-I/O verwenden 430
Wie sich die Dateideskriptoren mit close und dup verändern 431
Benannte Pipes: FIFOs 433
Auf FIFOs zugreifen 434
Eine FIFO-Datei mit open öffnen 435
FIFOs schreiben und lesen 438
Für Fortgeschrittene: Client und Server mit FIFOs 441
Die CD-Anwendung 445
Ziele 446
Implementierung 446
Funktionen der Client-Schnittstelle 450
Suchen in der Datenbank 454
Die Server-Schnittstelle 456
Die Pipe 460
Server-Funktionen 461
Client-Funktionen 463
Die Anwendung - Zusammenfassung 466
Zusammenfassung 466
Kapitel 13: Semaphore, Nachrichtenwarteschlangen und gemeinsam genutzter Arbeitsspeicher 467
Semaphore 467
Definition 468
Ein theoretisches Beispiel 468
Semaphore unter UNIX 469
semget 470
semop 470
semctl 471
Semaphore einsetzen 472
Semaphore - Zusammenfassung 475
Gemeinsam genutzter Arbeitsspeicher 476
Überblick 476
Funktionen für gemeinsam genutzten Arbeitsspeicher 477
shmget 477
shmat 477
shmdt 478
shmctl 478
Gemeinsam genutzter Arbeitsspeicher - Zusammenfassung 482
Nachrichtenwarteschlangen 482
Überblick 483
Funktionen für Nachrichtenwarteschlangen 483
msgget 483
msgsnd 483
msgrcv 484
msgctl 485
Nachrichtenwarteschlangen - Zusammenfassung 488
Die Anwendung 488
IPC-Statusbefehle 492
Semaphore 492
Gemeinsam genutzter Arbeitsspeicher 492
Nachrichtenwarteschlangen 493
Zusammenfassung 493
Kapitel 14: Sockets 495
Was ist ein Socket? 496
Socket-Verbindungen 496
Socket-Attribute 499
Socket-Domänen 500
Socket-Typen 500
Socket-Protokolle 501
Ein Socket einrichten 501
Socket-Adressen 502
Socket-Benennung 503
Eine Socket-Warteschlange einrichten 503
Verbindungen akzeptieren 504
Verbindungen anfordern 504
Sockets schließen 505
Kommunikation über Sockets 505
Die Byte-Reihenfolge für Host und Netzwerk 508
Netzwerkinformationen 509
Der Internet-Dämon 514
Socket-Optionen 515
Mehrere Clients 515
select 518
Mehrere Clients 521
Zusammenfassung 524
Kapitel 15: Tcl: Tool Command Language 525
Ein Überblick über Tcl 525
Unser erstes Tcl-Programm 525
Tcl-Befehle 526
Variablen und Werte 527
Quotierung und Ersetzungen 528
Variablen 528
Befehle 528
Schrägstrich 528
Zeichenfolgen 529
Geschweifte Klammern 529
Ersetzungen durch den Tcl-Interpreter 529
Kommentare 531
Berechnungen 531
Kontrollstrukturen 533
if 533
switch 533
for 534
while 534
Fehlerbehandlung 535
error 535
catch 535
Operationen mit Zeichenfolgen 535
string 535
first, last, compare 535
index 536
length 536
match 536
range 536
tolower, toupper 536
trim, trimleft, trimright 537
wordstart, wordend 537
Glob-Vergleich 537
regexp und regsub-Vergleich 537
append 538
regexp 538
regsub 539
Arrays 540
array 540
exists 541
get 541
names 541
set 541
Size 541
Listen 541
list 542
Split 542
join 542
concat 543
lappend 543
lindex 543
linsert 543
llength 544
lrange 544
lreplace 544
lsearch 544
lsort 545
foreach 545
Prozeduren 546
upvar 547
Ein- und Ausgabe 548
open 548
close 548
read 548
gets 549
Puts 549
format 549
scan 549
file 550
atime, mtime 550
dirname 550
exists, executable 550
extension, rootname 550
isdirectory, isfile 550
owned 550
readable, writeable 551
size 551
Ein Tcl-Programm 551
Netzwerkunterstützung 553
Tcl neu erschaffen 554
Tcl-Erweiterungen 554
expect 554
[incr Tcl] 555
TclX 555
Grafik 555
Tk 555
Zusammenfassung 555
Kapitel 16: X-Programmierung 557
Was ist X? 557
X.Server 558
X.Pr0t0k0ll 558
Xlib 558
X.Cl1e11ts 558
X.T00lk1ts 558
X.W111d0w.Ma11ager 559
Das X-Programmiermodell 560
Programmbeginn 560
Hauptschleife 561
Bereinigung 562
Schnellkurs X-Programmierung 562
Das Tk-Toolkit 562
Programmierung mit Fenstern 564
Konfigurationsdateien 565
Weitere Befehle 566
Tk-Widgets 566
Rahmen 567
Toplevel 568
Labels 568
Schaltflächen 568
Meldungen 570
Eingabefelder 571
Listenfelder 572
Rollbalken 573
Skalen 574
Text 574
Bildflächen 578
Bilder 581
Menüs 583
Menüschaltflächen 588
Popup-Menüs 590
Optionsmenüs 592
Dialoge 593
Integrierte Tk-Dialoge 594
Farbschemata 597
Schriftarten 597
Bindungen 598
BindTags 600
Geometrie-Manager 601
pack 601
place 602
Grid 603
Fokus und Navigation 604
Optionsdatenbank 605
Kommunikation zwischen den Anwendungen 606
Markieren 606
Clipboard 607
Window-Manager 608
Dynamisches und statisches Laden 609
Sicheres Tk: Safe-Tcl 610
Ein Mega-Widget 612
Eine Anwendung mit dem Baum-Widget 622
Tk-Prozessprotokollanzeige 625
Internationale Anpassung 636
Wie geht's weiter? 636
Zusammenfassung 638
Kapitel 17: GNOME-Programmierung mit GTK+ 639
GNOME - Einführung 639
Die GNOME-Architektur 640
Der GNOME-Desktop 642
GNOME-Programmierung mit GTK+ 643
Datentypen 643
Widget-Hierarchie 643
Umgang mit Signalen und Callbacks 647
Container 647
Schaltflächen 648
Eine GNOME-Anwendung 658
Voraussetzungen 658
Was muss kodiert werden? 658
Die CD-Anwendung mit GNOME 666
Zusammenfassung 666
Kapitel 18: Die Programmiersprache Perl 667
Einführung 667
Hello, Perl 668
Perl-Variablen 669
Skalare 669
Arrays 669
Hashes 670
Anführungszeichen und Ersetzungen 671
Besondere Variablen 671
Operatoren und Funktionen 672
Logische und Bitoperatoren 674
Array-Operationen 675
Hash-Operationen 676
Reguläre Ausdrücke 676
Mustervergleich 676
Ersetzung 678
Kontrollstrukturen und Unterroutinen 679
Tests 679
Schleifen 679
Bedingte Anweisungen 680
Unterroutinen 681
Dateiein- und -ausgabe 682
system()/" 683
Ein vollständiges Beispiel 683
Perl in der Befehlszeile 690
Module 691
CPAN 691
Modulinstallation 691
Dokumentation (perldoc) 692
Netzwerk 692
LWP 692
IO::Socket 692
Netzwerkmodule 693
Datenbanken 693
Die überarbeitete CD-Datenbank 694
Zusammenfassung 698
Kapitel 19: Für das Internet programmieren: HTML 699
Was ist das World Wide Web? 699
Terminologie 700
HTTP (HyperText Transfer-Protokoll) 700
MIME (Multimedia Internet Mail Extensions) 700
SGML (Standard Generalized Markup Language) 700
DTD (Document Type Definition) 700
HTML (HyperText Markup Language) 701
XML (Extensible Markup Language) 701
CSS (Cascading Style Sheets) 701
XHTML (Extensible Hypertext Markup Language) 701
URL (Uniform Resource Locator) 701
URI (Uniform Resource Identifier) 702
HTML-Programmierung 702
HTML formal betrachtet 703
HTML-Tags 705
Titel 705
Kommentare 705
Überschriften 705
Textformatierung 705
Textstile 706
Sonderzeichen 709
Listen 709
Bilder 711
Tabellen 713
Anker oder Hyperlinks 718
Kombination von Ankern und Bildern 720
Nicht HTML-basierte URLs 721
Anker zu anderen Sites 721
Wozu Bilder noch dienen können 723
HTML-Texte erstellen 724
HTML-Seiten bereitstellen 724
Ein Überblick über HTML im Netzwerk 725
Einen Server einrichten 725
Anklickbare Übersichten 726
Server-seitige Übersichten 726
Client-seitige Übersichten 727
Server-side Includes 728
Tipps für die Einrichtung von WWW-Seiten 731
Zusammenfassung 732
Kapitel 20: Für das Internet programmieren 2: CGI 733
FORM-Elemente 734
Das FORM-Tag 734
Das INPUT-Tag 734
TEXT 735
PASSWORD 735
HIDDEN 735
CHECKBOX 735
RADIO 736
IMAGE 736
SUBMIT 736
RESET 736
Das SELECT-Tag 736
Das TEXTAREA-Tag 737
Eine einfache Seite 737
Informationen an den WWW-Server senden 740
Informationskodierung 740
Serverprogramme 741
Sicherheit 741
Ein CGI-Programm für den Server programmieren 742
Umgebungsvariablen 742
Praktische Anwendung 743
CGI-Programme mit erweiterten URLs 747
Formulardaten dekodieren 749
HTML-Text an den Client zurückgeben 756
Tipps und Tricks 759
CGI-Programme richtig beenden 759
Clients umlenken 760
Dynamische Bilder 760
Kontextinformationen verbergen 760
Eine Anwendung 761
Perl 767
Zusammenfassung 772
Kapitel 21: Gerätetreiber 773
Geräte 774
Geräteklassen 774
Benutzer- und Kernel-Bereich 775
Was gehört wohin? 776
Module aufbauen 776
Datentypen 778
Zeichenorientierte Geräte 780
Dateioperationen 781
Ein Beispiel für einen Treiber: Schar 783
Das MSG-Makro 784
Das Gerät registrieren 784
Modulnutzungszähler 785
Öffnen und wieder freigeben 785
Von dem Gerät lesen 787
Die aktuelle Task 788
Warteschlangen 788
Auf Geräte schreiben 789
Nicht blockierendes Lesen 790
Suchen 791
ioctl 791
Benutzerrechte überprüfen 793
poll 794
Modulparameter 796
Die Dateisystemschnittstelle proc 797
Wie sich schar verhält 800
Zusammenfassung 800
Zeit und Zeittakt 801
Kurze Verzögerungen 802
Zeitgeber 803
Den Prozessor freigeben 805
Task-Warteschlangen 806
Die vordefinierten Task-Warteschlangen 807
Zusammenfassung 808
Arbeitsspeicherverwaltung 808
Virtuelle Speicherbereiche 809
Adressraum 810
Speicherzuweisungen 810
Speicherzuweisungen mit Gerätetreibern 811
kmalloc 812
vmalloc 812
Daten zwischen dem Benutzer- und Kernel-Bereich austauschen 813
Weitere Daten verschieben 814
Einfache Speicherzuweisung 814
I/O-Speicher 816
Portierbarkeit 817
Gerätezuweisung mit Iomap 818
I/O-Speicher mit mmap 818
I/O-Ports 820
Portierbarkeit 821
Interrupt-Behandlung 821
Einen Interrupt zuweisen 822
Einen passenden IRQ erhalten 823
Der IRQ-Handler 824
Bottom Halves 825
Rückverzweigungen 826
Einzelne Interrupts deaktivieren 827
Unterbrechungsfreie Operationen 827
Kritische Bereiche schützen 828
Spin Locks 828
Schreib- und Lesesperren 829
Automatische Sperren 829
Blockgeräte 829
Radimo - ein einfaches RAM-Disk-Modul 830
Sektorengröße 831
Ein Blockgerät registrieren 831
Datenträgerwechsel 832
Ioctl für Blockgeräte 833
Die request-Funktion 833
Der Pufferzwischenspeicher 835
Weitere Informationen 837
Debugging 837
Oops 837
Modul-Debugging 839
Die magische Taste 840
Der Kernel-Debugger KDB 840
Remote-Debugging 841
Allgemeine Anmerkungen zum Debugging 841
Portierbarkeit 842
Datentypen 842
Byte-Vertauschung 842
Ausrichtung 843
Wie es weitergeht 843
Anatomie des Kernel-Codes 844
Stichwortverzeichnis 845
|
|
|