Martin Gräfe: "C und Linux", Hanser Verlag München, ISBN 3-446-22973-6


Inhaltsverzeichnis

Vorwort11
 
Einführung13
 1.1 Warum gerade "C"?13
 1.2 Die Werkzeuge14
  1.2.1 Der Editor - die Qual der Wahl14
  1.2.2 Der C-Compiler: gcc15
  1.2.3 Ablaufsteuerung mit make16
  1.2.4 Die Debugger: gdb, xxgdb und ddd17
  1.2.5 Integrierte Entwicklungsumgebungen19
 1.3 Der Umgang mit gcc, gdb und make an Beispielen22
  1.3.1 Primzahlen berechnen22
  1.3.2 Fehlersuche mit dem gcc23
  1.3.3 Fehlersuche mit gdb, xxgdb und ddd24
  1.3.4 Funktionsbibliotheken verwenden27
  1.3.5 Quelltexte aufteilen28
 1.4 Weiterführende Informationen31
  1.4.1 Die Unix-Online-Hilfen "man" und "xman"32
  1.4.2 Ein Blick hinter die Kulissen: die Include-Dateien35
 
2 Arbeiten mit einer Entwicklungsumgebung37
 2.1 Die "X-Window Workbench"37
  2.1.1 Ein kleines Beispielprogramm38
  2.1.2 Projektdateien40
  2.1.3 Auswählen und Verändern der Konfiguration40
  2.1.4 Anpassen der Konfigurationsdatei41
 2.2 "Anjuta"42
  2.2.1 Ein neues Projekt anlegen42
  2.2.2 Eingabe der Quelltexte44
  2.2.3 Kompilieren und Starten des Beispiels46
 
3 Shell-Programme47
 3.1 Parameter und Rückgabewert der Funktion main()47
  3.1.1 Die Bedeutung des Rückgabewertes von main()48
  3.1.2 Die Variablen argc und argv48
  3.1.3 Auswerten der Kommandozeilenparameter49
  3.1.4 Achtung: Platzhalter!51
 3.2 Konventionen für Shell-Programme53
  3.2.1 Ein Muss: Die Hilfe-Option53
  3.2.2 Fehlermeldungen54
  3.2.3 Eigene man-Seiten erstellen56
 3.3 Programme mehrsprachig auslegen57
 3.4 Ausgabesteuerung im Terminal-Fenster64
  3.4.1 ANSI-Steuersequenzen64
  3.4.2 Die "ncurses"-Bibliothek66
 
4 Dateien und Verzeichnisse69
 4.1 Das Arbeiten mit Dateien69
  4.1.1 Gepufferte Ein-/Ausgabe69
  4.1.2 stdin, stdout und stderr70
  4.1.3 Dateien öffnen und schließen71
  4.1.4 Lesen aus und Schreiben in Dateien72
  4.1.5 Ein Beispiel: Zeilen nummerieren76
 4.2 Eigenschaften von Dateien oder Verzeichnissen auswerten78
 4.3 Verzeichnisse einlesen80
 
5 Interprozesskommunikation83
 5.1 Prozessverwaltung unter Linux83
 5.2 Neue Prozesse starten84
  5.2.1 Shell-Programme aufrufen mit system()84
  5.2.2 Die Funktionen der exec-Familie85
  5.2.3 Einen Kind-Prozess erzeugen mit fork()87
  5.2.4 Warteschleifen90
 5.3 Signale91
  5.3.1 Die Weckfunktion alarm()92
  5.3.2 Einen Signal-Handler einrichten93
  5.3.3 Auf die Beendigung eines Kind-Prozesses warten94
  5.3.4 Signale setzen mit kill()95
 5.4 Datenaustausch zwischen Prozessen96
  5.4.1 Pipes96
  5.4.2 FIFOs101
  5.4.3 Shared Memory103
 5.5 Alternativen zur Erzeugung von Prozessen106
  5.5.1 popen() und pclose()106
  5.5.2 Die fork()-Alternative clone()108
  5.5.3 POSIX-Threads110
 
6 Devices - das Tor zur Hardware115
 6.1 Das Device-Konzept unter Linux115
  6.1.1 Devices öffnen und schließen116
  6.1.2 Ungepuffertes Lesen und Schreiben117
  6.1.3 Devices steuern mit ioctl()118
 6.2 Das CD-ROM-Laufwerk119
  6.2.1 Die CD "auswerfen"119
  6.2.2 Fähigkeiten des Laufwerks auslesen120
  6.2.3 Audio-CDs abspielen122
 6.3 Ansteuerung einer Sound-Karte130
  6.3.1 Der Mixer131
  6.3.2 Audio-Daten aufnehmen und wiedergeben135
 6.4 "Video for Linux"140
  6.4.1 Eigenschaften des Devices140
  6.4.2 Bilder aufzeichnen143
 6.5 Die serielle Schnittstelle148
  6.5.1 Terminal-Parameter einstellen149
  6.5.2 Ein kleines Terminalprogramm152
 
7 Netzwerkprogrammierung157
 7.1 Einführung158
  7.1.1 Begriffe158
  7.1.2 Das Client-Server-Prinzip161
  7.1.3 Sockets161
 7.2 Der TCP/IP-Client163
  7.2.1 Aufbau einer Verbindung163
  7.2.2 Ein "Universal"-Client165
  7.2.3 Rechnernamen in IP-Adressen umwandeln168
 7.3 Server-Programme171
  7.3.1 Die Funktionsweise eines Servers171
  7.3.2 Ein interaktiver TCP/IP-Server173
  7.3.3 Ein minimaler HTTP-Server177
 7.4 Noch ein Wort zur Sicherheit184
 
8 Grafikprogrammierung187
 8.1 Die grafische Oberfläche X11187
 8.2 XView und OpenLook188
  8.2.1 Ein Fenster öffnen189
  8.2.2 Attribute abfragen und ändern194
  8.2.3 Bedienfelder einrichten194
  8.2.4 Schaltflächen (Buttons) einrichten196
  8.2.5 Daten an eine Callback-Funktion weiterleiten201
  8.2.6 Anpassen der Fenster- und Bedienfeldgröße204
  8.2.7 Das Message-Objekt205
  8.2.8 Auswahlfelder206
  8.2.9 Icons (Piktogramme)209
  8.2.10 Eingabefelder für Text und Zahlen214
  8.2.11 Pegelanzeige und Schieberegler217
  8.2.12 Menüs219
  8.2.13 Command Frames224
  8.2.14 Hinweis- und Abfragefenster226
  8.2.15 Farben einrichten231
  8.2.16 Zeichenflächen234
  8.2.17 Ein kleines Zeichenprogramm250
  8.2.18 Dateiauswahlfenster256
 8.3 Grafik ohne X11 mit der libvga261
  8.3.1 Besonderheiten beim Arbeiten mit der libvga261
  8.3.2 Ein erstes Beispiel262
  8.3.3 Mit Perspektive: 3D-Funktionen zeichnen265
  8.3.4 Ein kleines Malprogramm268
  8.3.5 Erweiterte Funktionen mit der libvgagl273
  8.3.6 Weitere Informationsquellen275
 
9 Hardware-Programmierung277
 9.1 Hardware-nahe Programme schreiben277
  9.1.1 Eigene Programme mit root-Rechten ausstatten278
  9.1.2 Zugriff auf I/O-Ports freischalten278
  9.1.3 Zugriff auf die I/O-Ports279
 9.2 Ansteuerung des Parallelports280
  9.2.1 Beschreibung des Parallelports280
  9.2.2 Die Adresse des Parallelports suchen280
  9.2.3 Ein Beispiel: "LED-Lauflicht"283
 9.3 Modem-Steuerleitungen abfragen285
 
10 Beispielprojekte289
 10.1 Ein Mischpult für X11: xvmixer289
  10.1.1 Ziel des Projektes289
  10.1.2 Aufteilung des Quelltextes290
  10.1.3 Das Hauptprogramm291
  10.1.4 Die Ansteuerung des Audio-Mixers293
  10.1.5 Die Funktionen der grafischen Benutzeroberfläche 297
  10.1.6 Das Ergebnis305
  10.1.7 To Do306
 10.2 Telefonbuch mit automatischer Anwahl307
  10.2.1 Ziel des Projektes307
  10.2.2 Strukturierung des Projektes308
  10.2.3 Das Hauptprogramm308
  10.2.4 Funktionen zur Ansteuerung des Modems312
  10.2.5 Die Benutzerschnittstelle315
  10.2.6 To Do321
 
Anhang323
 A1 - Daten zum Buch im Internet323
 A2 - Das Paket gettext323
 A3 - Deutsche Sprachunterstützung für XView324
 A4 - Aufbau einer WAV-Audiodatei324
 A5 - Aufbau einer AU-Audiodatei326
 A6 - Linux-Programmierung unter Windows: Cygwin327
 A7 - Informationen aus dem Internet328
 
Index329