Jürgen Wolf
Linux-Unix-Programmierung: Das umfassende Handbuch (Galileo Computing) Wolf, Jürgen
2 Angebote ab € 68,30 €
Jürgen Wolf
Linux-Unix-Programmierung: Das umfassende Handbuch (Galileo Computing) Wolf, Jürgen
- Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
Dieses Buch bietet einen umfassenden Einblick in die Systemprogrammierung unter Linux und Unix. Es ist für Leser mit Betriebssystem-Kenntnissen und C-Wissen geeignet.
Aus dem Inhalt: - Umfassende Einführung - E/A-Funktionen - Attribute von Dateien und Verzeichnissen - Zugriff auf Systeminformationen - Prozesse und Dämonprozesse - Umgebungsvariablen eines Prozesses - Signale - Interprozesskommunikation - Threads - Netzwerkprogrammierung - MySQL - Terminal E/A und Benutzerschnittstellen für die Konsole - Sicherheit - XWindow-Programmierung - Windowmanager - Systeminformationen - Devices - GTK+ - Assembler mit Linux…mehr
Dieses Buch bietet einen umfassenden Einblick in die Systemprogrammierung unter Linux und Unix. Es ist für Leser mit Betriebssystem-Kenntnissen und C-Wissen geeignet.
Aus dem Inhalt:
- Umfassende Einführung
- E/A-Funktionen
- Attribute von Dateien und Verzeichnissen
- Zugriff auf Systeminformationen
- Prozesse und Dämonprozesse
- Umgebungsvariablen eines Prozesses
- Signale
- Interprozesskommunikation
- Threads
- Netzwerkprogrammierung
- MySQL
- Terminal E/A und Benutzerschnittstellen für die Konsole
- Sicherheit
- XWindow-Programmierung
- Windowmanager
- Systeminformationen
- Devices
- GTK+
- Assembler mit Linux
Aus dem Inhalt:
- Umfassende Einführung
- E/A-Funktionen
- Attribute von Dateien und Verzeichnissen
- Zugriff auf Systeminformationen
- Prozesse und Dämonprozesse
- Umgebungsvariablen eines Prozesses
- Signale
- Interprozesskommunikation
- Threads
- Netzwerkprogrammierung
- MySQL
- Terminal E/A und Benutzerschnittstellen für die Konsole
- Sicherheit
- XWindow-Programmierung
- Windowmanager
- Systeminformationen
- Devices
- GTK+
- Assembler mit Linux
Produktdetails
- Produktdetails
- Verlag: Galileo Press
- ISBN-13: 9783898425704
- ISBN-10: 3898425703
- Artikelnr.: 12938570
- Verlag: Galileo Press
- ISBN-13: 9783898425704
- ISBN-10: 3898425703
- Artikelnr.: 12938570
Jürgen Wolf ist Softwareentwickler und Autor aus Leidenschaft. C/C++, Perl und Linux sind seine Themen. Sein Traum: ein ruhiges Leben im Westen Kanadas. Und Bücher auf der Veranda schreiben. Besuchen Sie seine umfangreiche Website www.pronix.de.
1 Einführung ... 29
... 1.1 Anforderung an den Leser ... 29
... 1.2 Anforderung an das Betriebssystem ... 30
... 1.3 Von Unix ... 30
... 1.4 ... zu Linux ... 31
... 1.5 Der Compiler GCC - Ein kurze Einführung ... 32
... 1.6 POSIX, X/OPEN und ANSI C ... 37
... 1.7 Übersicht zum Buch ... 38
... 1.8 Schreibkonventionen ... 40
... 1.9 Notationsstil ... 41
... 1.10 Weitere Hilfen ... 41
2 E/A-Funktionen ... 43
... 2.1 Elementare E/A-Funktionen ... 43
... 2.2 Filedeskriptor ... 44
... 2.3 Funktionen, die den Filedeskriptor verwenden ... 46
... 2.4 Standard-E/A-Funktionen ... 85
... 2.5 Mit Verzeichnissen arbeiten ... 96
... 2.6 Fehlerbehandlung ... 114
... 2.7 Ausblick ... 117
3 Attribute von Dateien und Verzeichnissen ... 119
... 3.1 Struktur stat ... 119
4 Zugriff auf Systeminformationen ... 133
... 4.1 Informationen aus dem /proc-Verzeichnis herausziehen ... 134
... 4.2 Hardware-/Systeminformationen ermitteln ... 135
... 4.3 Prozessinformationen ... 141
... 4.4 Kernelinformationen ... 145
... 4.5 Filesysteme ... 152
... 4.6 Weiterführendes ... 152
5 Devices - Eine einfache Verbindung zur Hardware ... 155
... 5.1 Die Gerätedatei-Typen ... 155
... 5.2 Die Gerätedatei-Nummern ... 156
... 5.3 Zugriff auf die Gerätedateien ... 157
... 5.4 Gerätenamen ... 157
... 5.5 Spezielle Gerätedateien ... 159
... 5.6 Gerätedateien in der Praxis einsetzen ... 160
6 Dämonen, Zombies und Prozesse ... 177
... 6.1 Was ist ein Prozess? ... 177
... 6.2 Prozesskomponente ... 177
... 6.3 Prozesse überwachen - ps, top, kpm ... 186
... 6.4 Lebenszyklus eines Prozesses ... 188
... 6.5 Umgebungsvariablen eines Prozesses ... 190
... 6.6 Ressourcenlimits eines Prozesses ... 197
... 6.7 Prozesserkennung ... 200
... 6.8 Erzeugung von Prozessen - fork() ... 202
... 6.9 Warten auf einen Prozess ... 211
... 6.10 Die exec-Familie ... 218
... 6.11 Kommandoaufrufe aus dem Programm - system() ... 223
... 6.12 Dämonprozesse ... 224
... 6.13 Zusammenfassung und Ausblick ... 234
7 Signale ... 235
... 7.1 Grundlage zu den Signalen ... 235
... 7.2 Das neue Signalkonzept ... 240
... 7.3 Signalmenge initialisieren ... 241
... 7.4 Signalmenge hinzufügen oder löschen ... 241
... 7.5 Signale einrichten oder erfragen ... 241
... 7.6 Signal an den eigenen Prozess senden - raise() ... 248
... 7.7 Signale an andere Prozesse senden - kill() ... 248
... 7.8 Zeitschaltuhr einrichten - alarm() ... 249
... 7.9 Prozesse stoppen, bis ein Signal eintritt - pause() ... 249
... 7.10 Prozesse für eine bestimmte Zeit stoppen - sleep() und usleep() ... 249
... 7.11 Signalmaske erfragen oder ändern - sigprocmask() ... 250
... 7.12 Prozess während einer Änderung der Signalmaske stoppen - sigsuspend() ... 251
... 7.13 Prozesse synchronisieren ... 251
8 IPC (Interprozesskommunikation) ... 255
... 8.1 Unterschiedliche Interprozesskommunikations-Techniken im Überblick ... 255
... 8.2 Gründe für IPC ... 262
... 8.3 Pipes ... 262
... 8.4 System V-Interprozesskommunikation ... 299
... 8.5 Semaphore ... 301
... 8.6 Message Queues ... 309
... 8.7 Shared Memory ... 321
9 Threads ... 331
... 9.1 Wozu Thread-Programmierung? ... 331
... 9.2 Unterschiede zwischen Threads und Prozessen? ... 331
... 9.3 Thread-sicher (thread-safe) ... 332
... 9.4 Thread-Bibliotheken ... 332
... 9.5 Kernel-Threads und User-Threads ... 333
... 9.6 Scheduling ... 334
... 9.7 Die grundlegenden Funktionen zur Thread-Programmierung ... 334
... 9.8 Jeder Thread ein eigener Prozess? ... 337
... 9.9 Die Attribute von Threads und das Scheduling ... 338
... 9.10 Zwei Threads vergleichen ... 341
... 9.11 Mutexe ... 342
... 9.12 Mutex anlegen ... 343
... 9.13 Mutex sperren und wieder freigeben ... 343
... 9.14 Mutex löschen ... 344
... 9.15 Attribute von Mutexen ... 348
... 9.16 Race conditions mit Condition Variables vermeiden ... 349
... 9.17 Fehlerbehandlung von Threads ... 358
... 9.18 Threads und Signale ... 360
... 9.19 Zusammenfassung ... 363
10 Netzwerkprogrammierung ... 365
... 10.1 Einführung ... 365
... 10.2 Aufbau von Netzwerken ... 365
... 10.3 TCP/IP - Aufbau und Struktur ... 370
... 10.4 TCP Socket ... 373
... 10.5 Kommunikationsmodell ... 374
... 10.6 Grundlegende Funktionen zum Zugriff auf die Socketschnittstelle ... 374
... 10.7 Aufbau eines Clientprogramms ... 380
... 10.8 Aufbau des Serverprogramms ... 384
... 10.9 Weitere Funktionen zur Netzwerkprogrammierung ... 389
... 10.10 Der Puffer ... 402
... 10.11 Parallele Server ... 403
... 10.12 Syncrones Multiplexing - select() ... 416
... 10.13 POSIX-Threads und Netzwerkprogrammierung ... 428
... 10.14 Optionen für Sockets setzen bzw. erfragen ... 433
... 10.15 UDP ... 437
... 10.16 Multicast-Socket ... 444
... 10.17 Nicht blockierende I/O-Sockets ... 451
... 10.18 Etwas zu Streams und TLI, Raw Socket, XTI ... 454
... 10.19 IPv4 und IPv6 456
... 10.20 Netzwerksoftware nach IPv6 portieren ... 457
... 10.21 Sicherheit und Verschlüsselung ... 459
11 MySQL und PostgreSQL ... 461
... 11.1 Relationales Datenbanksystem ... 461
... 11.2 Relationaler Datenbankserver ... 463
... 11.3 SQL-Server im Überblick ... 464
... 11.4 MySQL ... 464
... 11.5 MySQL C-API ... 488
... 11.6 Beispiel eines Newssystems mit MySQL ... 528
... 11.7 Neue SQL-Funktionen für die Shell - MySQL erweitern ... 555
... 11.8 MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 557
... 11.9 PostgreSQL - objektrelationales Datenbankverwaltungssystem ... 566
12 Terminal E/A und Benutzerschnittstellen für die Konsole ... 603
... 12.1 termios ... 603
... 12.2 terminfo ... 622
... 12.3 ncurses - Halbgrafik ... 631
13 Xlib - X Window-Programmierung ... 667
... 13.1 Architektur von X ... 667
... 13.2 X Toolkit ... 669
... 13.3 Der Windowmanager ... 670
... 13.4 Fenster mit X ... 670
... 13.5 Events ... 679
... 13.6 Grafik mit X ... 688
... 13.7 Text mit X ... 694
... 13.8 Farben mit X ... 704
... 13.9 Beispiel - Ein Button mit X ... 714
... 13.10 Wozu kann ich denn nun die Xlib in der Praxis verwenden? ... 719
... 13.11 X und X-Toolkits - Einführung ... 719
... 13.12 Toolkit-Programmierung ... 719
... 13.13 Ein einfaches Fenster mit einem Button ... 720
... 13.14 Zwei Buttons in Box- und Form-Widget mit Textausgabe (Label-Widget) ... 727
... 13.15 editres - Widget-Hierarchie ... 730
... 13.16 Texteingabe mit Dialog-Widget ... 731
... 13.17 X-Toolkits meets Xlib ... 735
... 13.18 Zusammenfassung ... 738
14 GTK+ 741
... 14.1 Was ist GTK+? ... 741
... 14.2 GTK+-Anwendungen übersetzten ... 745
... 14.3 Eine Einführung in die Glib-Bibliothek ... 746
... 14.4 Grundlagen der GTK+-Programmierung ... 768
... 14.5 Fenster - GtkWindow ... 777
... 14.6 Anzeige-Elemente ... 785
... 14.7 Behälter ... 793
... 14.8 Buttons und Toogled-Buttons ... 806
... 14.9 Dateneingabe ... 814
... 14.10 Menü und Toolbar ... 825
... 14.11 Mehrzeiliger Text ... 843
... 14.12 Auswählen (Selection) ... 855
... 14.13 Events ... 864
... 14.14 Weitere Widget- und GTK+-Elemente im Überblick ... 870
15 SDL ... 873
... 15.1 Was ist und kann SDL? ... 873
... 15.2 SDL installieren ... 874
... 15.3 SDL-Anwendungen erstellen ... 874
... 15.4 SDL initialisieren und Videomodus einstellen ... 875
... 15.5 Direkt auf den Bildschirm zeichnen ... 878
... 15.6 Bitmap laden und anzeigen ... 883
... 15.7 Ein anderes Grafikformat laden und anzeigen ... 886
... 15.8 Der rechteckige Bildbereich von SDL ... 887
... 15.9 Farbenschlüssel, Transparenz und Alpha-Blending ... 890
... 15.10 Animation ... 892
... 15.11 Eingabe- und Ereignissverarbeitung ... 899
... 15.12 Audio ... 921
... 15.13 Ausblick ... 926
16 Werkzeuge für Programmierer ... 929
... 16.1 Make ... 936
... 16.2 Bibliotheken erstellen ... 951
... 16.3 RPM ... 959
... 16.4 RCS und CVS ... 970
... 16.5 Zeitmessung von Programmen ... 996
... 16.6 Debuggen mit gdb und ddd ... 1003
... 16.7 STRACE - Systemaufrufe verfolgen ... 1014
... 16.8 Memory Leaks und unerlaubte Speicherzugriffe ... 1016
... 16.9 Ausblick ... 1023
A Sicherheit unter Linux ... 1025
... A.1 Viren und Trojaner ... 1025
... A.2 Der Superuser (su) ... 1026
... A.3 Überlaufen von Logfiles ... 1026
... A.4 Zugriffsrechte auf Dateien ... 1027
... A.5 Das SUID-Bit ... 1027
... A.6 Programme ohne Ausführrechte ... 1029
... A.7 Buffer Overflow (Pufferüberlauf) ... 1029
... A.8 Race Condition ... 1032
... A.9 Temporäre Dateien ... 1033
... A.10 chroot ... 1033
... A.11 Umgebungsvariablen ... 1034
... A.12 Zugriffsrechte - häufig gemachte Fehler ... 1035
... A.13 system() und popen() ... 1035
B Funktionsreferenz ... 1037
... B.1 ANSI C ... 1037
... B.2 ANSI C99 1057
... B.3 Elementare E/A-Funktionen ... 1065
... B.4 Fortgeschrittene Ein-/Ausgabe-Funktionen ... 1068
... B.5 Verzeichnisse ... 1074
... B.6 Attribute von Dateien und Verzeichnissen ... 1076
... B.7 Links ... 1080
... B.8 Prozess und Prozessverwaltungsfunktionen ... 1080
... B.9 Signale - Das neue Signalkonzept ... 1082
... B.10 Interprozesskommunikationen ... 1086
... B.11 Sys-V-Interprozesskommnunikationen ... 1087
... B.12 Threadprogrammierung ... 1089
... B.13 Netzwerkprogrammierung ... 1094
... B.14 MySQL C-API ... 1100
... B.15 PostgreSQL C-API ... 1105
... B.16 Weitere Funktionsreferenzen auf der Buch-CD ... 1109
C Inhalt der Buch-CD ... 1111
... 1.1 Anforderung an den Leser ... 29
... 1.2 Anforderung an das Betriebssystem ... 30
... 1.3 Von Unix ... 30
... 1.4 ... zu Linux ... 31
... 1.5 Der Compiler GCC - Ein kurze Einführung ... 32
... 1.6 POSIX, X/OPEN und ANSI C ... 37
... 1.7 Übersicht zum Buch ... 38
... 1.8 Schreibkonventionen ... 40
... 1.9 Notationsstil ... 41
... 1.10 Weitere Hilfen ... 41
2 E/A-Funktionen ... 43
... 2.1 Elementare E/A-Funktionen ... 43
... 2.2 Filedeskriptor ... 44
... 2.3 Funktionen, die den Filedeskriptor verwenden ... 46
... 2.4 Standard-E/A-Funktionen ... 85
... 2.5 Mit Verzeichnissen arbeiten ... 96
... 2.6 Fehlerbehandlung ... 114
... 2.7 Ausblick ... 117
3 Attribute von Dateien und Verzeichnissen ... 119
... 3.1 Struktur stat ... 119
4 Zugriff auf Systeminformationen ... 133
... 4.1 Informationen aus dem /proc-Verzeichnis herausziehen ... 134
... 4.2 Hardware-/Systeminformationen ermitteln ... 135
... 4.3 Prozessinformationen ... 141
... 4.4 Kernelinformationen ... 145
... 4.5 Filesysteme ... 152
... 4.6 Weiterführendes ... 152
5 Devices - Eine einfache Verbindung zur Hardware ... 155
... 5.1 Die Gerätedatei-Typen ... 155
... 5.2 Die Gerätedatei-Nummern ... 156
... 5.3 Zugriff auf die Gerätedateien ... 157
... 5.4 Gerätenamen ... 157
... 5.5 Spezielle Gerätedateien ... 159
... 5.6 Gerätedateien in der Praxis einsetzen ... 160
6 Dämonen, Zombies und Prozesse ... 177
... 6.1 Was ist ein Prozess? ... 177
... 6.2 Prozesskomponente ... 177
... 6.3 Prozesse überwachen - ps, top, kpm ... 186
... 6.4 Lebenszyklus eines Prozesses ... 188
... 6.5 Umgebungsvariablen eines Prozesses ... 190
... 6.6 Ressourcenlimits eines Prozesses ... 197
... 6.7 Prozesserkennung ... 200
... 6.8 Erzeugung von Prozessen - fork() ... 202
... 6.9 Warten auf einen Prozess ... 211
... 6.10 Die exec-Familie ... 218
... 6.11 Kommandoaufrufe aus dem Programm - system() ... 223
... 6.12 Dämonprozesse ... 224
... 6.13 Zusammenfassung und Ausblick ... 234
7 Signale ... 235
... 7.1 Grundlage zu den Signalen ... 235
... 7.2 Das neue Signalkonzept ... 240
... 7.3 Signalmenge initialisieren ... 241
... 7.4 Signalmenge hinzufügen oder löschen ... 241
... 7.5 Signale einrichten oder erfragen ... 241
... 7.6 Signal an den eigenen Prozess senden - raise() ... 248
... 7.7 Signale an andere Prozesse senden - kill() ... 248
... 7.8 Zeitschaltuhr einrichten - alarm() ... 249
... 7.9 Prozesse stoppen, bis ein Signal eintritt - pause() ... 249
... 7.10 Prozesse für eine bestimmte Zeit stoppen - sleep() und usleep() ... 249
... 7.11 Signalmaske erfragen oder ändern - sigprocmask() ... 250
... 7.12 Prozess während einer Änderung der Signalmaske stoppen - sigsuspend() ... 251
... 7.13 Prozesse synchronisieren ... 251
8 IPC (Interprozesskommunikation) ... 255
... 8.1 Unterschiedliche Interprozesskommunikations-Techniken im Überblick ... 255
... 8.2 Gründe für IPC ... 262
... 8.3 Pipes ... 262
... 8.4 System V-Interprozesskommunikation ... 299
... 8.5 Semaphore ... 301
... 8.6 Message Queues ... 309
... 8.7 Shared Memory ... 321
9 Threads ... 331
... 9.1 Wozu Thread-Programmierung? ... 331
... 9.2 Unterschiede zwischen Threads und Prozessen? ... 331
... 9.3 Thread-sicher (thread-safe) ... 332
... 9.4 Thread-Bibliotheken ... 332
... 9.5 Kernel-Threads und User-Threads ... 333
... 9.6 Scheduling ... 334
... 9.7 Die grundlegenden Funktionen zur Thread-Programmierung ... 334
... 9.8 Jeder Thread ein eigener Prozess? ... 337
... 9.9 Die Attribute von Threads und das Scheduling ... 338
... 9.10 Zwei Threads vergleichen ... 341
... 9.11 Mutexe ... 342
... 9.12 Mutex anlegen ... 343
... 9.13 Mutex sperren und wieder freigeben ... 343
... 9.14 Mutex löschen ... 344
... 9.15 Attribute von Mutexen ... 348
... 9.16 Race conditions mit Condition Variables vermeiden ... 349
... 9.17 Fehlerbehandlung von Threads ... 358
... 9.18 Threads und Signale ... 360
... 9.19 Zusammenfassung ... 363
10 Netzwerkprogrammierung ... 365
... 10.1 Einführung ... 365
... 10.2 Aufbau von Netzwerken ... 365
... 10.3 TCP/IP - Aufbau und Struktur ... 370
... 10.4 TCP Socket ... 373
... 10.5 Kommunikationsmodell ... 374
... 10.6 Grundlegende Funktionen zum Zugriff auf die Socketschnittstelle ... 374
... 10.7 Aufbau eines Clientprogramms ... 380
... 10.8 Aufbau des Serverprogramms ... 384
... 10.9 Weitere Funktionen zur Netzwerkprogrammierung ... 389
... 10.10 Der Puffer ... 402
... 10.11 Parallele Server ... 403
... 10.12 Syncrones Multiplexing - select() ... 416
... 10.13 POSIX-Threads und Netzwerkprogrammierung ... 428
... 10.14 Optionen für Sockets setzen bzw. erfragen ... 433
... 10.15 UDP ... 437
... 10.16 Multicast-Socket ... 444
... 10.17 Nicht blockierende I/O-Sockets ... 451
... 10.18 Etwas zu Streams und TLI, Raw Socket, XTI ... 454
... 10.19 IPv4 und IPv6 456
... 10.20 Netzwerksoftware nach IPv6 portieren ... 457
... 10.21 Sicherheit und Verschlüsselung ... 459
11 MySQL und PostgreSQL ... 461
... 11.1 Relationales Datenbanksystem ... 461
... 11.2 Relationaler Datenbankserver ... 463
... 11.3 SQL-Server im Überblick ... 464
... 11.4 MySQL ... 464
... 11.5 MySQL C-API ... 488
... 11.6 Beispiel eines Newssystems mit MySQL ... 528
... 11.7 Neue SQL-Funktionen für die Shell - MySQL erweitern ... 555
... 11.8 MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 557
... 11.9 PostgreSQL - objektrelationales Datenbankverwaltungssystem ... 566
12 Terminal E/A und Benutzerschnittstellen für die Konsole ... 603
... 12.1 termios ... 603
... 12.2 terminfo ... 622
... 12.3 ncurses - Halbgrafik ... 631
13 Xlib - X Window-Programmierung ... 667
... 13.1 Architektur von X ... 667
... 13.2 X Toolkit ... 669
... 13.3 Der Windowmanager ... 670
... 13.4 Fenster mit X ... 670
... 13.5 Events ... 679
... 13.6 Grafik mit X ... 688
... 13.7 Text mit X ... 694
... 13.8 Farben mit X ... 704
... 13.9 Beispiel - Ein Button mit X ... 714
... 13.10 Wozu kann ich denn nun die Xlib in der Praxis verwenden? ... 719
... 13.11 X und X-Toolkits - Einführung ... 719
... 13.12 Toolkit-Programmierung ... 719
... 13.13 Ein einfaches Fenster mit einem Button ... 720
... 13.14 Zwei Buttons in Box- und Form-Widget mit Textausgabe (Label-Widget) ... 727
... 13.15 editres - Widget-Hierarchie ... 730
... 13.16 Texteingabe mit Dialog-Widget ... 731
... 13.17 X-Toolkits meets Xlib ... 735
... 13.18 Zusammenfassung ... 738
14 GTK+ 741
... 14.1 Was ist GTK+? ... 741
... 14.2 GTK+-Anwendungen übersetzten ... 745
... 14.3 Eine Einführung in die Glib-Bibliothek ... 746
... 14.4 Grundlagen der GTK+-Programmierung ... 768
... 14.5 Fenster - GtkWindow ... 777
... 14.6 Anzeige-Elemente ... 785
... 14.7 Behälter ... 793
... 14.8 Buttons und Toogled-Buttons ... 806
... 14.9 Dateneingabe ... 814
... 14.10 Menü und Toolbar ... 825
... 14.11 Mehrzeiliger Text ... 843
... 14.12 Auswählen (Selection) ... 855
... 14.13 Events ... 864
... 14.14 Weitere Widget- und GTK+-Elemente im Überblick ... 870
15 SDL ... 873
... 15.1 Was ist und kann SDL? ... 873
... 15.2 SDL installieren ... 874
... 15.3 SDL-Anwendungen erstellen ... 874
... 15.4 SDL initialisieren und Videomodus einstellen ... 875
... 15.5 Direkt auf den Bildschirm zeichnen ... 878
... 15.6 Bitmap laden und anzeigen ... 883
... 15.7 Ein anderes Grafikformat laden und anzeigen ... 886
... 15.8 Der rechteckige Bildbereich von SDL ... 887
... 15.9 Farbenschlüssel, Transparenz und Alpha-Blending ... 890
... 15.10 Animation ... 892
... 15.11 Eingabe- und Ereignissverarbeitung ... 899
... 15.12 Audio ... 921
... 15.13 Ausblick ... 926
16 Werkzeuge für Programmierer ... 929
... 16.1 Make ... 936
... 16.2 Bibliotheken erstellen ... 951
... 16.3 RPM ... 959
... 16.4 RCS und CVS ... 970
... 16.5 Zeitmessung von Programmen ... 996
... 16.6 Debuggen mit gdb und ddd ... 1003
... 16.7 STRACE - Systemaufrufe verfolgen ... 1014
... 16.8 Memory Leaks und unerlaubte Speicherzugriffe ... 1016
... 16.9 Ausblick ... 1023
A Sicherheit unter Linux ... 1025
... A.1 Viren und Trojaner ... 1025
... A.2 Der Superuser (su) ... 1026
... A.3 Überlaufen von Logfiles ... 1026
... A.4 Zugriffsrechte auf Dateien ... 1027
... A.5 Das SUID-Bit ... 1027
... A.6 Programme ohne Ausführrechte ... 1029
... A.7 Buffer Overflow (Pufferüberlauf) ... 1029
... A.8 Race Condition ... 1032
... A.9 Temporäre Dateien ... 1033
... A.10 chroot ... 1033
... A.11 Umgebungsvariablen ... 1034
... A.12 Zugriffsrechte - häufig gemachte Fehler ... 1035
... A.13 system() und popen() ... 1035
B Funktionsreferenz ... 1037
... B.1 ANSI C ... 1037
... B.2 ANSI C99 1057
... B.3 Elementare E/A-Funktionen ... 1065
... B.4 Fortgeschrittene Ein-/Ausgabe-Funktionen ... 1068
... B.5 Verzeichnisse ... 1074
... B.6 Attribute von Dateien und Verzeichnissen ... 1076
... B.7 Links ... 1080
... B.8 Prozess und Prozessverwaltungsfunktionen ... 1080
... B.9 Signale - Das neue Signalkonzept ... 1082
... B.10 Interprozesskommunikationen ... 1086
... B.11 Sys-V-Interprozesskommnunikationen ... 1087
... B.12 Threadprogrammierung ... 1089
... B.13 Netzwerkprogrammierung ... 1094
... B.14 MySQL C-API ... 1100
... B.15 PostgreSQL C-API ... 1105
... B.16 Weitere Funktionsreferenzen auf der Buch-CD ... 1109
C Inhalt der Buch-CD ... 1111
1 Einführung ... 29
... 1.1 Anforderung an den Leser ... 29
... 1.2 Anforderung an das Betriebssystem ... 30
... 1.3 Von Unix ... 30
... 1.4 ... zu Linux ... 31
... 1.5 Der Compiler GCC - Ein kurze Einführung ... 32
... 1.6 POSIX, X/OPEN und ANSI C ... 37
... 1.7 Übersicht zum Buch ... 38
... 1.8 Schreibkonventionen ... 40
... 1.9 Notationsstil ... 41
... 1.10 Weitere Hilfen ... 41
2 E/A-Funktionen ... 43
... 2.1 Elementare E/A-Funktionen ... 43
... 2.2 Filedeskriptor ... 44
... 2.3 Funktionen, die den Filedeskriptor verwenden ... 46
... 2.4 Standard-E/A-Funktionen ... 85
... 2.5 Mit Verzeichnissen arbeiten ... 96
... 2.6 Fehlerbehandlung ... 114
... 2.7 Ausblick ... 117
3 Attribute von Dateien und Verzeichnissen ... 119
... 3.1 Struktur stat ... 119
4 Zugriff auf Systeminformationen ... 133
... 4.1 Informationen aus dem /proc-Verzeichnis herausziehen ... 134
... 4.2 Hardware-/Systeminformationen ermitteln ... 135
... 4.3 Prozessinformationen ... 141
... 4.4 Kernelinformationen ... 145
... 4.5 Filesysteme ... 152
... 4.6 Weiterführendes ... 152
5 Devices - Eine einfache Verbindung zur Hardware ... 155
... 5.1 Die Gerätedatei-Typen ... 155
... 5.2 Die Gerätedatei-Nummern ... 156
... 5.3 Zugriff auf die Gerätedateien ... 157
... 5.4 Gerätenamen ... 157
... 5.5 Spezielle Gerätedateien ... 159
... 5.6 Gerätedateien in der Praxis einsetzen ... 160
6 Dämonen, Zombies und Prozesse ... 177
... 6.1 Was ist ein Prozess? ... 177
... 6.2 Prozesskomponente ... 177
... 6.3 Prozesse überwachen - ps, top, kpm ... 186
... 6.4 Lebenszyklus eines Prozesses ... 188
... 6.5 Umgebungsvariablen eines Prozesses ... 190
... 6.6 Ressourcenlimits eines Prozesses ... 197
... 6.7 Prozesserkennung ... 200
... 6.8 Erzeugung von Prozessen - fork() ... 202
... 6.9 Warten auf einen Prozess ... 211
... 6.10 Die exec-Familie ... 218
... 6.11 Kommandoaufrufe aus dem Programm - system() ... 223
... 6.12 Dämonprozesse ... 224
... 6.13 Zusammenfassung und Ausblick ... 234
7 Signale ... 235
... 7.1 Grundlage zu den Signalen ... 235
... 7.2 Das neue Signalkonzept ... 240
... 7.3 Signalmenge initialisieren ... 241
... 7.4 Signalmenge hinzufügen oder löschen ... 241
... 7.5 Signale einrichten oder erfragen ... 241
... 7.6 Signal an den eigenen Prozess senden - raise() ... 248
... 7.7 Signale an andere Prozesse senden - kill() ... 248
... 7.8 Zeitschaltuhr einrichten - alarm() ... 249
... 7.9 Prozesse stoppen, bis ein Signal eintritt - pause() ... 249
... 7.10 Prozesse für eine bestimmte Zeit stoppen - sleep() und usleep() ... 249
... 7.11 Signalmaske erfragen oder ändern - sigprocmask() ... 250
... 7.12 Prozess während einer Änderung der Signalmaske stoppen - sigsuspend() ... 251
... 7.13 Prozesse synchronisieren ... 251
8 IPC (Interprozesskommunikation) ... 255
... 8.1 Unterschiedliche Interprozesskommunikations-Techniken im Überblick ... 255
... 8.2 Gründe für IPC ... 262
... 8.3 Pipes ... 262
... 8.4 System V-Interprozesskommunikation ... 299
... 8.5 Semaphore ... 301
... 8.6 Message Queues ... 309
... 8.7 Shared Memory ... 321
9 Threads ... 331
... 9.1 Wozu Thread-Programmierung? ... 331
... 9.2 Unterschiede zwischen Threads und Prozessen? ... 331
... 9.3 Thread-sicher (thread-safe) ... 332
... 9.4 Thread-Bibliotheken ... 332
... 9.5 Kernel-Threads und User-Threads ... 333
... 9.6 Scheduling ... 334
... 9.7 Die grundlegenden Funktionen zur Thread-Programmierung ... 334
... 9.8 Jeder Thread ein eigener Prozess? ... 337
... 9.9 Die Attribute von Threads und das Scheduling ... 338
... 9.10 Zwei Threads vergleichen ... 341
... 9.11 Mutexe ... 342
... 9.12 Mutex anlegen ... 343
... 9.13 Mutex sperren und wieder freigeben ... 343
... 9.14 Mutex löschen ... 344
... 9.15 Attribute von Mutexen ... 348
... 9.16 Race conditions mit Condition Variables vermeiden ... 349
... 9.17 Fehlerbehandlung von Threads ... 358
... 9.18 Threads und Signale ... 360
... 9.19 Zusammenfassung ... 363
10 Netzwerkprogrammierung ... 365
... 10.1 Einführung ... 365
... 10.2 Aufbau von Netzwerken ... 365
... 10.3 TCP/IP - Aufbau und Struktur ... 370
... 10.4 TCP Socket ... 373
... 10.5 Kommunikationsmodell ... 374
... 10.6 Grundlegende Funktionen zum Zugriff auf die Socketschnittstelle ... 374
... 10.7 Aufbau eines Clientprogramms ... 380
... 10.8 Aufbau des Serverprogramms ... 384
... 10.9 Weitere Funktionen zur Netzwerkprogrammierung ... 389
... 10.10 Der Puffer ... 402
... 10.11 Parallele Server ... 403
... 10.12 Syncrones Multiplexing - select() ... 416
... 10.13 POSIX-Threads und Netzwerkprogrammierung ... 428
... 10.14 Optionen für Sockets setzen bzw. erfragen ... 433
... 10.15 UDP ... 437
... 10.16 Multicast-Socket ... 444
... 10.17 Nicht blockierende I/O-Sockets ... 451
... 10.18 Etwas zu Streams und TLI, Raw Socket, XTI ... 454
... 10.19 IPv4 und IPv6 456
... 10.20 Netzwerksoftware nach IPv6 portieren ... 457
... 10.21 Sicherheit und Verschlüsselung ... 459
11 MySQL und PostgreSQL ... 461
... 11.1 Relationales Datenbanksystem ... 461
... 11.2 Relationaler Datenbankserver ... 463
... 11.3 SQL-Server im Überblick ... 464
... 11.4 MySQL ... 464
... 11.5 MySQL C-API ... 488
... 11.6 Beispiel eines Newssystems mit MySQL ... 528
... 11.7 Neue SQL-Funktionen für die Shell - MySQL erweitern ... 555
... 11.8 MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 557
... 11.9 PostgreSQL - objektrelationales Datenbankverwaltungssystem ... 566
12 Terminal E/A und Benutzerschnittstellen für die Konsole ... 603
... 12.1 termios ... 603
... 12.2 terminfo ... 622
... 12.3 ncurses - Halbgrafik ... 631
13 Xlib - X Window-Programmierung ... 667
... 13.1 Architektur von X ... 667
... 13.2 X Toolkit ... 669
... 13.3 Der Windowmanager ... 670
... 13.4 Fenster mit X ... 670
... 13.5 Events ... 679
... 13.6 Grafik mit X ... 688
... 13.7 Text mit X ... 694
... 13.8 Farben mit X ... 704
... 13.9 Beispiel - Ein Button mit X ... 714
... 13.10 Wozu kann ich denn nun die Xlib in der Praxis verwenden? ... 719
... 13.11 X und X-Toolkits - Einführung ... 719
... 13.12 Toolkit-Programmierung ... 719
... 13.13 Ein einfaches Fenster mit einem Button ... 720
... 13.14 Zwei Buttons in Box- und Form-Widget mit Textausgabe (Label-Widget) ... 727
... 13.15 editres - Widget-Hierarchie ... 730
... 13.16 Texteingabe mit Dialog-Widget ... 731
... 13.17 X-Toolkits meets Xlib ... 735
... 13.18 Zusammenfassung ... 738
14 GTK+ 741
... 14.1 Was ist GTK+? ... 741
... 14.2 GTK+-Anwendungen übersetzten ... 745
... 14.3 Eine Einführung in die Glib-Bibliothek ... 746
... 14.4 Grundlagen der GTK+-Programmierung ... 768
... 14.5 Fenster - GtkWindow ... 777
... 14.6 Anzeige-Elemente ... 785
... 14.7 Behälter ... 793
... 14.8 Buttons und Toogled-Buttons ... 806
... 14.9 Dateneingabe ... 814
... 14.10 Menü und Toolbar ... 825
... 14.11 Mehrzeiliger Text ... 843
... 14.12 Auswählen (Selection) ... 855
... 14.13 Events ... 864
... 14.14 Weitere Widget- und GTK+-Elemente im Überblick ... 870
15 SDL ... 873
... 15.1 Was ist und kann SDL? ... 873
... 15.2 SDL installieren ... 874
... 15.3 SDL-Anwendungen erstellen ... 874
... 15.4 SDL initialisieren und Videomodus einstellen ... 875
... 15.5 Direkt auf den Bildschirm zeichnen ... 878
... 15.6 Bitmap laden und anzeigen ... 883
... 15.7 Ein anderes Grafikformat laden und anzeigen ... 886
... 15.8 Der rechteckige Bildbereich von SDL ... 887
... 15.9 Farbenschlüssel, Transparenz und Alpha-Blending ... 890
... 15.10 Animation ... 892
... 15.11 Eingabe- und Ereignissverarbeitung ... 899
... 15.12 Audio ... 921
... 15.13 Ausblick ... 926
16 Werkzeuge für Programmierer ... 929
... 16.1 Make ... 936
... 16.2 Bibliotheken erstellen ... 951
... 16.3 RPM ... 959
... 16.4 RCS und CVS ... 970
... 16.5 Zeitmessung von Programmen ... 996
... 16.6 Debuggen mit gdb und ddd ... 1003
... 16.7 STRACE - Systemaufrufe verfolgen ... 1014
... 16.8 Memory Leaks und unerlaubte Speicherzugriffe ... 1016
... 16.9 Ausblick ... 1023
A Sicherheit unter Linux ... 1025
... A.1 Viren und Trojaner ... 1025
... A.2 Der Superuser (su) ... 1026
... A.3 Überlaufen von Logfiles ... 1026
... A.4 Zugriffsrechte auf Dateien ... 1027
... A.5 Das SUID-Bit ... 1027
... A.6 Programme ohne Ausführrechte ... 1029
... A.7 Buffer Overflow (Pufferüberlauf) ... 1029
... A.8 Race Condition ... 1032
... A.9 Temporäre Dateien ... 1033
... A.10 chroot ... 1033
... A.11 Umgebungsvariablen ... 1034
... A.12 Zugriffsrechte - häufig gemachte Fehler ... 1035
... A.13 system() und popen() ... 1035
B Funktionsreferenz ... 1037
... B.1 ANSI C ... 1037
... B.2 ANSI C99 1057
... B.3 Elementare E/A-Funktionen ... 1065
... B.4 Fortgeschrittene Ein-/Ausgabe-Funktionen ... 1068
... B.5 Verzeichnisse ... 1074
... B.6 Attribute von Dateien und Verzeichnissen ... 1076
... B.7 Links ... 1080
... B.8 Prozess und Prozessverwaltungsfunktionen ... 1080
... B.9 Signale - Das neue Signalkonzept ... 1082
... B.10 Interprozesskommunikationen ... 1086
... B.11 Sys-V-Interprozesskommnunikationen ... 1087
... B.12 Threadprogrammierung ... 1089
... B.13 Netzwerkprogrammierung ... 1094
... B.14 MySQL C-API ... 1100
... B.15 PostgreSQL C-API ... 1105
... B.16 Weitere Funktionsreferenzen auf der Buch-CD ... 1109
C Inhalt der Buch-CD ... 1111
... 1.1 Anforderung an den Leser ... 29
... 1.2 Anforderung an das Betriebssystem ... 30
... 1.3 Von Unix ... 30
... 1.4 ... zu Linux ... 31
... 1.5 Der Compiler GCC - Ein kurze Einführung ... 32
... 1.6 POSIX, X/OPEN und ANSI C ... 37
... 1.7 Übersicht zum Buch ... 38
... 1.8 Schreibkonventionen ... 40
... 1.9 Notationsstil ... 41
... 1.10 Weitere Hilfen ... 41
2 E/A-Funktionen ... 43
... 2.1 Elementare E/A-Funktionen ... 43
... 2.2 Filedeskriptor ... 44
... 2.3 Funktionen, die den Filedeskriptor verwenden ... 46
... 2.4 Standard-E/A-Funktionen ... 85
... 2.5 Mit Verzeichnissen arbeiten ... 96
... 2.6 Fehlerbehandlung ... 114
... 2.7 Ausblick ... 117
3 Attribute von Dateien und Verzeichnissen ... 119
... 3.1 Struktur stat ... 119
4 Zugriff auf Systeminformationen ... 133
... 4.1 Informationen aus dem /proc-Verzeichnis herausziehen ... 134
... 4.2 Hardware-/Systeminformationen ermitteln ... 135
... 4.3 Prozessinformationen ... 141
... 4.4 Kernelinformationen ... 145
... 4.5 Filesysteme ... 152
... 4.6 Weiterführendes ... 152
5 Devices - Eine einfache Verbindung zur Hardware ... 155
... 5.1 Die Gerätedatei-Typen ... 155
... 5.2 Die Gerätedatei-Nummern ... 156
... 5.3 Zugriff auf die Gerätedateien ... 157
... 5.4 Gerätenamen ... 157
... 5.5 Spezielle Gerätedateien ... 159
... 5.6 Gerätedateien in der Praxis einsetzen ... 160
6 Dämonen, Zombies und Prozesse ... 177
... 6.1 Was ist ein Prozess? ... 177
... 6.2 Prozesskomponente ... 177
... 6.3 Prozesse überwachen - ps, top, kpm ... 186
... 6.4 Lebenszyklus eines Prozesses ... 188
... 6.5 Umgebungsvariablen eines Prozesses ... 190
... 6.6 Ressourcenlimits eines Prozesses ... 197
... 6.7 Prozesserkennung ... 200
... 6.8 Erzeugung von Prozessen - fork() ... 202
... 6.9 Warten auf einen Prozess ... 211
... 6.10 Die exec-Familie ... 218
... 6.11 Kommandoaufrufe aus dem Programm - system() ... 223
... 6.12 Dämonprozesse ... 224
... 6.13 Zusammenfassung und Ausblick ... 234
7 Signale ... 235
... 7.1 Grundlage zu den Signalen ... 235
... 7.2 Das neue Signalkonzept ... 240
... 7.3 Signalmenge initialisieren ... 241
... 7.4 Signalmenge hinzufügen oder löschen ... 241
... 7.5 Signale einrichten oder erfragen ... 241
... 7.6 Signal an den eigenen Prozess senden - raise() ... 248
... 7.7 Signale an andere Prozesse senden - kill() ... 248
... 7.8 Zeitschaltuhr einrichten - alarm() ... 249
... 7.9 Prozesse stoppen, bis ein Signal eintritt - pause() ... 249
... 7.10 Prozesse für eine bestimmte Zeit stoppen - sleep() und usleep() ... 249
... 7.11 Signalmaske erfragen oder ändern - sigprocmask() ... 250
... 7.12 Prozess während einer Änderung der Signalmaske stoppen - sigsuspend() ... 251
... 7.13 Prozesse synchronisieren ... 251
8 IPC (Interprozesskommunikation) ... 255
... 8.1 Unterschiedliche Interprozesskommunikations-Techniken im Überblick ... 255
... 8.2 Gründe für IPC ... 262
... 8.3 Pipes ... 262
... 8.4 System V-Interprozesskommunikation ... 299
... 8.5 Semaphore ... 301
... 8.6 Message Queues ... 309
... 8.7 Shared Memory ... 321
9 Threads ... 331
... 9.1 Wozu Thread-Programmierung? ... 331
... 9.2 Unterschiede zwischen Threads und Prozessen? ... 331
... 9.3 Thread-sicher (thread-safe) ... 332
... 9.4 Thread-Bibliotheken ... 332
... 9.5 Kernel-Threads und User-Threads ... 333
... 9.6 Scheduling ... 334
... 9.7 Die grundlegenden Funktionen zur Thread-Programmierung ... 334
... 9.8 Jeder Thread ein eigener Prozess? ... 337
... 9.9 Die Attribute von Threads und das Scheduling ... 338
... 9.10 Zwei Threads vergleichen ... 341
... 9.11 Mutexe ... 342
... 9.12 Mutex anlegen ... 343
... 9.13 Mutex sperren und wieder freigeben ... 343
... 9.14 Mutex löschen ... 344
... 9.15 Attribute von Mutexen ... 348
... 9.16 Race conditions mit Condition Variables vermeiden ... 349
... 9.17 Fehlerbehandlung von Threads ... 358
... 9.18 Threads und Signale ... 360
... 9.19 Zusammenfassung ... 363
10 Netzwerkprogrammierung ... 365
... 10.1 Einführung ... 365
... 10.2 Aufbau von Netzwerken ... 365
... 10.3 TCP/IP - Aufbau und Struktur ... 370
... 10.4 TCP Socket ... 373
... 10.5 Kommunikationsmodell ... 374
... 10.6 Grundlegende Funktionen zum Zugriff auf die Socketschnittstelle ... 374
... 10.7 Aufbau eines Clientprogramms ... 380
... 10.8 Aufbau des Serverprogramms ... 384
... 10.9 Weitere Funktionen zur Netzwerkprogrammierung ... 389
... 10.10 Der Puffer ... 402
... 10.11 Parallele Server ... 403
... 10.12 Syncrones Multiplexing - select() ... 416
... 10.13 POSIX-Threads und Netzwerkprogrammierung ... 428
... 10.14 Optionen für Sockets setzen bzw. erfragen ... 433
... 10.15 UDP ... 437
... 10.16 Multicast-Socket ... 444
... 10.17 Nicht blockierende I/O-Sockets ... 451
... 10.18 Etwas zu Streams und TLI, Raw Socket, XTI ... 454
... 10.19 IPv4 und IPv6 456
... 10.20 Netzwerksoftware nach IPv6 portieren ... 457
... 10.21 Sicherheit und Verschlüsselung ... 459
11 MySQL und PostgreSQL ... 461
... 11.1 Relationales Datenbanksystem ... 461
... 11.2 Relationaler Datenbankserver ... 463
... 11.3 SQL-Server im Überblick ... 464
... 11.4 MySQL ... 464
... 11.5 MySQL C-API ... 488
... 11.6 Beispiel eines Newssystems mit MySQL ... 528
... 11.7 Neue SQL-Funktionen für die Shell - MySQL erweitern ... 555
... 11.8 MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 557
... 11.9 PostgreSQL - objektrelationales Datenbankverwaltungssystem ... 566
12 Terminal E/A und Benutzerschnittstellen für die Konsole ... 603
... 12.1 termios ... 603
... 12.2 terminfo ... 622
... 12.3 ncurses - Halbgrafik ... 631
13 Xlib - X Window-Programmierung ... 667
... 13.1 Architektur von X ... 667
... 13.2 X Toolkit ... 669
... 13.3 Der Windowmanager ... 670
... 13.4 Fenster mit X ... 670
... 13.5 Events ... 679
... 13.6 Grafik mit X ... 688
... 13.7 Text mit X ... 694
... 13.8 Farben mit X ... 704
... 13.9 Beispiel - Ein Button mit X ... 714
... 13.10 Wozu kann ich denn nun die Xlib in der Praxis verwenden? ... 719
... 13.11 X und X-Toolkits - Einführung ... 719
... 13.12 Toolkit-Programmierung ... 719
... 13.13 Ein einfaches Fenster mit einem Button ... 720
... 13.14 Zwei Buttons in Box- und Form-Widget mit Textausgabe (Label-Widget) ... 727
... 13.15 editres - Widget-Hierarchie ... 730
... 13.16 Texteingabe mit Dialog-Widget ... 731
... 13.17 X-Toolkits meets Xlib ... 735
... 13.18 Zusammenfassung ... 738
14 GTK+ 741
... 14.1 Was ist GTK+? ... 741
... 14.2 GTK+-Anwendungen übersetzten ... 745
... 14.3 Eine Einführung in die Glib-Bibliothek ... 746
... 14.4 Grundlagen der GTK+-Programmierung ... 768
... 14.5 Fenster - GtkWindow ... 777
... 14.6 Anzeige-Elemente ... 785
... 14.7 Behälter ... 793
... 14.8 Buttons und Toogled-Buttons ... 806
... 14.9 Dateneingabe ... 814
... 14.10 Menü und Toolbar ... 825
... 14.11 Mehrzeiliger Text ... 843
... 14.12 Auswählen (Selection) ... 855
... 14.13 Events ... 864
... 14.14 Weitere Widget- und GTK+-Elemente im Überblick ... 870
15 SDL ... 873
... 15.1 Was ist und kann SDL? ... 873
... 15.2 SDL installieren ... 874
... 15.3 SDL-Anwendungen erstellen ... 874
... 15.4 SDL initialisieren und Videomodus einstellen ... 875
... 15.5 Direkt auf den Bildschirm zeichnen ... 878
... 15.6 Bitmap laden und anzeigen ... 883
... 15.7 Ein anderes Grafikformat laden und anzeigen ... 886
... 15.8 Der rechteckige Bildbereich von SDL ... 887
... 15.9 Farbenschlüssel, Transparenz und Alpha-Blending ... 890
... 15.10 Animation ... 892
... 15.11 Eingabe- und Ereignissverarbeitung ... 899
... 15.12 Audio ... 921
... 15.13 Ausblick ... 926
16 Werkzeuge für Programmierer ... 929
... 16.1 Make ... 936
... 16.2 Bibliotheken erstellen ... 951
... 16.3 RPM ... 959
... 16.4 RCS und CVS ... 970
... 16.5 Zeitmessung von Programmen ... 996
... 16.6 Debuggen mit gdb und ddd ... 1003
... 16.7 STRACE - Systemaufrufe verfolgen ... 1014
... 16.8 Memory Leaks und unerlaubte Speicherzugriffe ... 1016
... 16.9 Ausblick ... 1023
A Sicherheit unter Linux ... 1025
... A.1 Viren und Trojaner ... 1025
... A.2 Der Superuser (su) ... 1026
... A.3 Überlaufen von Logfiles ... 1026
... A.4 Zugriffsrechte auf Dateien ... 1027
... A.5 Das SUID-Bit ... 1027
... A.6 Programme ohne Ausführrechte ... 1029
... A.7 Buffer Overflow (Pufferüberlauf) ... 1029
... A.8 Race Condition ... 1032
... A.9 Temporäre Dateien ... 1033
... A.10 chroot ... 1033
... A.11 Umgebungsvariablen ... 1034
... A.12 Zugriffsrechte - häufig gemachte Fehler ... 1035
... A.13 system() und popen() ... 1035
B Funktionsreferenz ... 1037
... B.1 ANSI C ... 1037
... B.2 ANSI C99 1057
... B.3 Elementare E/A-Funktionen ... 1065
... B.4 Fortgeschrittene Ein-/Ausgabe-Funktionen ... 1068
... B.5 Verzeichnisse ... 1074
... B.6 Attribute von Dateien und Verzeichnissen ... 1076
... B.7 Links ... 1080
... B.8 Prozess und Prozessverwaltungsfunktionen ... 1080
... B.9 Signale - Das neue Signalkonzept ... 1082
... B.10 Interprozesskommunikationen ... 1086
... B.11 Sys-V-Interprozesskommnunikationen ... 1087
... B.12 Threadprogrammierung ... 1089
... B.13 Netzwerkprogrammierung ... 1094
... B.14 MySQL C-API ... 1100
... B.15 PostgreSQL C-API ... 1105
... B.16 Weitere Funktionsreferenzen auf der Buch-CD ... 1109
C Inhalt der Buch-CD ... 1111