Suchen und Finden
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
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.