Inhaltsverzeichnis | 6 |
Vorwort | 12 |
1 Einführung | 14 |
1.1 Warum gerade ”C“? | 14 |
1.2 Bevor es losgeht . . . | 15 |
1.2.1 Paketverwaltung unter SuSE-Linux | 15 |
1.2.2 Paketinstallation bei Ubuntu | 17 |
1.3 DieWerkzeuge | 19 |
1.3.1 Der Editor – die Qual der Wahl | 19 |
1.3.2 Der GNU C-Compiler gcc | 21 |
1.3.3 Ablaufsteuerung mit GNU make | 21 |
1.3.4 Für die Fehlersuche: Die Debugger | 23 |
1.3.5 Integrierte Entwicklungsumgebungen | 24 |
1.4 Der Umgang mit Compiler, Debugger und ”make“ anhand von Beispielen | 27 |
1.4.1 Primzahlen berechnen | 27 |
1.4.2 Fehlersuche mit dem gcc | 29 |
1.4.3 Fehlersuche mit dem GNU Debugger | 30 |
1.4.4 Funktionsbibliotheken verwenden | 32 |
1.4.5 Quelltexte aufteilen | 34 |
1.5 Weiterführende Informationen | 38 |
1.5.1 Die Unix-Online-Hilfen ”man“,”xman“ und ”tkman“ | 39 |
1.5.2 Ein Blick hinter die Kulissen: Die Include-Dateien | 41 |
2 Arbeiten mit einer Entwicklungsumgebung | 44 |
2.1 Anjuta | 44 |
2.1.1 Ein neues Projekt anlegen | 44 |
2.1.2 Eingabe der Quelltexte | 46 |
2.1.3 Kompilieren und Starten des Beispiels | 48 |
2.2 KDevelop | 49 |
2.3 Eclipse + C Development Tooling (CDT) | 52 |
2.3.1 Plug-ins einbinden | 53 |
2.3.2 Ein neues Projekt anlegen | 53 |
3 Kommandozeilenprogramme | 56 |
3.1 Parameter und Rückgabewert der Funktion main() | 56 |
3.1.1 Die Bedeutung des Rückgabewertes von main() | 57 |
3.1.2 Die Variablen argc und argv | 57 |
3.1.3 Auswerten der Kommandozeilenparameter | 58 |
3.1.4 Achtung: Platzhalter! | 60 |
3.2 Konventionen für Kommandozeilenprogramme | 61 |
3.2.1 Ein Muss: Die Hilfe-Option | 61 |
3.2.2 Fehlermeldungen | 63 |
3.2.3 Eigene Manpages erstellen | 64 |
3.3 Programme mehrsprachig auslegen | 66 |
3.4 Ausgabesteuerung im Terminal-Fenster | 73 |
3.4.1 ANSI-Steuersequenzen | 73 |
3.4.2 Die ”ncurses“-Bibliothek | 74 |
4 Dateien und Verzeichnisse | 80 |
4.1 Die Arbeit mit Dateien | 80 |
4.1.1 Gepufferte Ein-/Ausgabe | 80 |
4.1.2 stdin, stdout und stderr | 81 |
4.1.3 Dateien öffnen und schließen | 82 |
4.1.4 Lesen aus und Schreiben in Dateien | 83 |
4.1.5 Ein Beispiel: Zeilen nummerieren | 87 |
4.2 Eigenschaften von Dateien oder Verzeichnissen auswerten | 88 |
4.3 Verzeichnisse einlesen | 90 |
5 Interprozesskommunikation | 92 |
5.1 Prozessverwaltung unter Linux | 92 |
5.2 Neue Prozesse starten | 93 |
5.2.1 Shell-Programme aufrufen mit system() | 93 |
5.2.2 Die Funktionen der exec-Familie | 94 |
5.2.3 Einen Kind-Prozess erzeugen mit fork() | 95 |
5.2.4 Warteschleifen | 98 |
5.3 Signale | 99 |
5.3.1 DieWeckfunktion alarm() | 100 |
5.3.2 Einen Signal-Handler einrichten | 101 |
5.3.3 Auf die Beendigung eines Kind-Prozesses warten | 102 |
5.3.4 Signale setzen mit kill() | 103 |
5.4 Datenaustausch zwischen Prozessen | 104 |
5.4.1 Pipes | 104 |
5.4.2 FIFOs | 108 |
5.4.3 SharedMemory | 110 |
5.5 Alternative Verfahren zur Erzeugung von Prozessen | 113 |
5.5.1 popen() und pclose() | 113 |
5.5.2 Die fork()-Alternative clone() | 114 |
5.5.3 POSIX-Threads | 116 |
6 Devices – das Tor zur Hardware | 120 |
6.1 Das Device-Konzept von Linux | 120 |
6.1.1 Devices öffnen und schließen | 121 |
6.1.2 Ungepuffertes Lesen und Schreiben | 122 |
6.1.3 Devices steuern mit ioctl() | 123 |
6.2 Das CD-ROM-Laufwerk | 124 |
6.2.1 Die CD” auswerfen“ | 124 |
6.2.2 Fähigkeiten des Laufwerks auslesen | 125 |
6.2.3 Audio-CDs abspielen | 127 |
6.3 Ansteuerung einer Soundkarte | 134 |
6.3.1 OSS, ALSA und ESOUND | 135 |
6.3.2 Der Mixer | 135 |
6.3.3 Audiodaten aufnehmen und wiedergeben | 139 |
6.4 ”Video for Linux“ | 143 |
6.4.1 Eigenschaften des Devices | 143 |
6.4.2 Bilder aufzeichnen | 146 |
6.5 Die serielle Schnittstelle | 155 |
6.5.1 Terminal-Parameter einstellen | 156 |
6.5.2 Ein kleines Terminalprogramm | 158 |
6.6 Druckerausgaben | 162 |
6.7 Der Universal Serial Bus (USB) | 167 |
6.7.1 Ansteuerung von USB-Geräten anhand eines Beispiels | 169 |
7 Netzwerkprogrammierung | 176 |
7.1 Einführung | 177 |
7.1.1 Begriffe | 177 |
7.1.2 Vorbereitung | 179 |
7.1.3 Das Client-Server-Prinzip | 182 |
7.1.4 Sockets | 183 |
7.2 Der TCP/IP-Client | 184 |
7.2.1 Aufbau einer Verbindung | 184 |
7.2.2 Ein ”Universal“-Client | 186 |
7.2.3 Rechnernamen in IP-Adressen umwandeln | 189 |
7.3 Server-Programme | 191 |
7.3.1 Die Funktionsweise eines Servers | 191 |
7.3.2 Ein interaktiver TCP/IP-Server | 193 |
7.3.3 Ein kleiner Webserver | 197 |
7.4 Das User Datagram Protocol (UDP) | 204 |
7.4.1 UDP-Nachrichten senden | 204 |
7.4.2 Der UDP-Server | 207 |
7.4.3 Pakete an alle Teilnehmer senden: Broadcast | 210 |
7.4.4 Multicast-Sockets | 212 |
7.4.5 UPnP – Universal Plug And Play | 213 |
7.5 Noch einWort zur Sicherheit | 217 |
8 Grafische Benutzeroberflächen | 218 |
8.1 Die grafische Oberfläche X11 | 218 |
8.2 Das Toolkit GTK+ | 219 |
8.2.1 GTK 1.2 versus GTK 2.0 | 219 |
8.2.2 GTK-Programme übersetzen | 220 |
8.2.3 Ein erstes Beispiel | 221 |
8.2.4 Das Callback-Prinzip | 223 |
8.2.5 Schaltflächen (Buttons) | 226 |
8.2.6 Hinweistexte (Tipps) | 229 |
8.2.7 Widgets anordnen | 229 |
8.2.8 Text-Labels | 233 |
8.2.9 Dialogfenster | 234 |
8.2.10 Auswahlfelder | 237 |
8.2.11 Eingabefelder für Text und Zahlen | 241 |
8.2.12 Menüs | 246 |
8.2.13 Pixmap-Grafiken darstellen | 251 |
8.2.14 Zeichenflächen | 257 |
8.2.15 Zeichenfläche mit Rollbalken | 263 |
8.2.16 Dateiauswahlfenster | 265 |
8.2.17 Umlaute und Sonderzeichen | 268 |
8.2.18 Wie geht es weiter? | 268 |
8.3 Grafik ohne X11 mit der SVGALIB | 269 |
8.3.1 Besonderheiten beim Arbeiten mit der libvga | 269 |
8.3.2 Ein erstes Beispiel | 270 |
8.3.3 Mit Perspektive: 3D-Funktionen zeichnen | 273 |
8.3.4 Ein kleines Malprogramm | 275 |
8.3.5 Erweiterte Funktionen mit der libvgagl | 279 |
8.3.6 Weitere Informationsquellen | 281 |
9 Hardware-Programmierung | 284 |
9.1 Hardware-nahe Programme schreiben | 284 |
9.1.1 Eigene Programme mit root-Rechten ausstatten | 285 |
9.1.2 Zugriff auf I/O-Ports freischalten | 285 |
9.1.3 Zugriff auf die I/O-Ports | 286 |
9.2 Ansteuerung des Parallelports | 287 |
9.2.1 Beschreibung des Parallelports | 287 |
9.2.2 Die Adresse des Parallelports suchen | 288 |
9.2.3 Ein Beispiel: ”LED-Lauflicht“ | 289 |
9.3 Modem-Steuerleitungen abfragen | 292 |
10 Beispielprojekte | 296 |
10.1 WebCam: Video-Übertragung per HTTP | 296 |
10.1.1 Wie die Bilder laufen lernen | 297 |
10.1.2 Strukturierung der Quelltexte | 297 |
10.1.3 Die HTTP-Authentifizierung | 311 |
10.2 Telefonbuch mit automatischer Anwahl | 313 |
10.2.1 Ziel des Projektes | 313 |
10.2.2 Strukturierung des Projektes | 314 |
10.2.3 Das Hauptprogramm | 314 |
10.2.4 Funktionen zur Ansteuerung des Modems | 317 |
10.2.5 Die Benutzerschnittstelle | 320 |
10.2.6 To Do | 325 |
Anhang | 328 |
A1 – Daten zum Buch im Internet | 328 |
A2 – Das X11-Toolkit XView | 328 |
A3 – Aufbau einer WAV-Audiodatei | 329 |
A4 – Aufbau einer AU-Audiodatei | 330 |
A5 – Linux-Programmierung unterWindows: Cygwin | 330 |
Literaturverzeichnis | 332 |
Stichwortverzeichnis | 334 |