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+.Neu in dieser 2., erweiterten Auflage: ein Kapitel zu System- und Benutzerdateien, ein stark erweitertes Thread-Kapitel und Ausführungen zu Dämonen, Zombies und Prozessen und zu Unix-Domain-Sockets.Galileo Press heißt jetzt Rheinwerk Verlag.
Rezensionen / Stimmen
Als Lehrbuch wie als Referenz für die Programmierung unter Linux und UNIX ist dieses Buch kaum zu übertreffen, aber es fordert vom Leser gute Grundkenntnisse. Alle für die Entwicklung eigener Anwendungen unter Linux und UNIX wichtigen Aspekte werden behandelt, zahlreiche Beispiele helfen bei der Umsetzung in die Praxis und die CD-ROM bietet weiterführendes Material für die, die trotz allem nicht genug bekommen.
Reihe
Sprache
Verlagsort
Verlagsgruppe
Editions-Typ
Maße
ISBN-13
978-3-89842-749-4 (9783898427494)
Schweitzer Klassifikation
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 - eine kurze Einführung ... 32
... 1.6 POSIX, X/OPEN und ANSI C ... 37
... 1.7 Übersicht zum Buch ... 39
... 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 ... 133
... 4.2 Hardware-/Systeminformationen ermitteln ... 135
... 4.3 Prozessinformationen ... 141
... 4.4 Kernel-Informationen ... 145
... 4.5 Filesysteme ... 152
... 4.6 Weiterführendes ... 152
5 Devices - eine einfache Verbindung
... 5.1 Die Gerätedateitypen ... 155
... 5.2 Die Gerätedateinummern ... 156
... 5.3 Zugriff auf die Gerätedateien ... 156
... 5.4 Gerätenamen ... 157
... 5.5 Spezielle Gerätedateien ... 159
... 5.6 Gerätedateien in der Praxis einsetzen ... 160
6 System- und Benutzerdateien ... 177
... 6.1 Die Datei /etc/passwd ... 177
... 6.2 Die Datei /etc/shadow ... 182
... /etc/shadow ... 184
... 6.3 Die Datei /etc/group ... 187
... 6.4 uname - Informationen zum lokalen System erfragen ... 191
... 6.5 Das Verzeichnis /etc/skel und Network Information Service (NIS) ... 192
... 6.6 Dateien für Netzwerkinformationen ... 193
7 Dämonen, Zombies und Prozesse ... 195
... 7.1 Was ist ein Prozess? ... 195
... 7.2 Prozesskomponente ... 195
... 7.3 Prozesse überwachen - ps, top, kpm ... 204
... 7.4 Lebenszyklus eines Prozesses ... 206
... 7.5 Umgebungsvariablen eines Prozesses ... 208
... 7.6 Ressourcenlimits eines Prozesses ... 215
... 7.7 Prozesserkennung ... 218
... 7.8 Erzeugung von Prozessen - fork() ... 219
... 7.9 Warten auf einen Prozess ... 229
... 7.10 Die exec-Familie ... 236
... 7.11 Kommandoaufrufe aus dem Programm - system() ... 241
... 7.12 Dämonprozesse ... 242
... 7.13 Rund um die Ausführung von Prozessen ... 252
... 7.14 Zusammenfassung und Ausblick ... 265
8 Signale ... 267
... 8.1 Grundlage zu den Signalen ... 267
... 8.2 Das neue Signalkonzept ... 272
... 8.3 Signalmenge initialisieren ... 272
... 8.4 Signalmenge hinzufügen oder löschen ... 273
... 8.5 Signale einrichten oder erfragen ... 273
... 8.6 Signal an den eigenen Prozess senden - raise() ... 279
... 8.7 Signale an andere Prozesse senden - kill() ... 280
... 8.8 Zeitschaltuhr einrichten - alarm() ... 280
... 8.9 Prozesse stoppen, bis ein Signal eintritt - pause() ... 281
... 8.10 Prozesse für eine bestimmte Zeit stoppen - sleep() und usleep() ... 281
... 8.11 Signalmaske erfragen oder ändern - sigprocmask() ... 282
... 8.12 Prozess während einer Änderung der Signalmaske stoppen - sigsuspend() ... 283
... 8.13 Prozesse synchronisieren ... 283
9 IPC - Interprozesskommunikation ... 287
... 9.1 Unterschiedliche Interprozesskommunikations-Techniken im Überblick ... 287
... 9.2 Gründe für IPC ... 294
... 9.3 Pipes ... 294
... 9.4 System-V-Interprozesskommunikation ... 331
... 9.5 Semaphore ... 334
... 9.6 Message Queues ... 341
... 9.7 Shared Memory ... 353
10 Threads ... 365
... 10.1 Unterschiede zwischen Threads und Prozessen ... 365
... 10.2 Thread-Bibliotheken ... 366
... 10.3 Kernel- und User-Threads ... 366
... 10.4 Scheduling und Zustände von Threads ... 367
... 10.5 Die grundlegenden Funktionen zur Thread-Programmierung ... 368
... 10.6 Die Attribute von Threads und das Scheduling ... 378
... 10.7 Threads synchronisieren ... 384
... 10.8 Threads abbrechen (canceln) ... 409
... 10.9 Erzeugen von Thread-spezifischen Daten (TSD-Data) ... 414
... 10.10 pthread_once - Codeabschnitt einmal ausführen ... 416
... 10.11 Thread-safe (thread-sichere Funktionen) ... 419
... 10.12 Threads und Signale ... 420
... 10.13 Zusammenfassung und Ausblick ... 424
11 Netzwerkprogrammierung ... 425
... 11.1 Einführung ... 425
... 11.2 Aufbau von Netzwerken ... 425
... 11.3 TCP/IP - Aufbau und Struktur ... 429
... 11.4 TCP Socket ... 432
... 11.5 Kommunikationsmodell ... 433
... 11.6 Grundlegende Funktionen zum Zugriff auf die Socket-Schnittstelle ... 434
... 11.7 Aufbau eines Clientprogramms ... 441
... 11.8 Aufbau des Serverprogramms ... 445
... 11.9 IP-Adressen konvertieren, manipulieren und extrahieren ... 450
... 11.10 Namen und IP-Adressen umwandeln ... 456
... 11.11 Der Puffer ... 465
... 11.12 Standard-E/A-Funktionen verwenden ... 465
... 11.13 Parallele Server ... 467
... 11.14 Syncrones Multiplexing - select() ... 481
... 11.15 POSIX-Threads und Netzwerkprogrammierung ... 502
... 11.16 Optionen für Sockets setzen bzw. erfragen ... 507
... 11.17 UDP ... 511
... 11.18 UNIX-Domain-Sockets (IPC) ... 519
... 11.19 Multicast-Socket ... 525
... 11.20 Nicht blockierende I/O-Sockets ... 532
... 11.21 Etwas zu Streams und TLI, Raw Socket, XTI ... 535
... 11.22 IPv4 und IPv6 537
... 11.23 Netzwerksoftware nach IPv6 portieren ... 538
... 11.24 Sicherheit und Verschlüsselung ... 540
12 MySQL und PostgreSQL ... 541
... 12.1 Relationales Datenbanksystem ... 541
... 12.2 Relationaler Datenbankserver ... 543
... 12.3 SQL-Server im Überblick ... 544
... 12.4 MySQL ... 544
... 12.5 MySQL C-API ... 567
... 12.6 Beispiel eines Newssystems mit MySQL ... 607
... 12.7 Neue SQL-Funktionen für die Shell - MySQL erweitern ... 635
... 12.8 MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 636
... 12.9 PostgreSQL - objektrelationales Datenbankverwaltungssystem ... 645
13 Terminal E/A und Benutzerschnittstellen für die Konsole ... 681
... 13.1 termios ... 681
... 13.2 terminfo ... 701
... 13.3 ncurses - Halbgrafik ... 709
14 Xlib - X Window-Programmierung ... 747
... 14.1 Architektur von X ... 747
... 14.2 X Toolkit ... 749
... 14.3 Der Window-Manager ... 750
... 14.4 Fenster mit X ... 750
... 14.5 Events ... 759
... 14.6 Grafik mit X ... 768
... 14.7 Text mit X ... 774
... 14.8 Farben mit X ... 785
... 14.9 Beispiel - ein Button mit X ... 795
... 14.10 Wozu kann ich denn nun die Xlib in der Praxis verwenden? ... 800
... 14.11 X und X-Toolkits - Einführung ... 800
... 14.12 Toolkit-Programmierung ... 800
... 14.13 Ein einfaches Fenster mit einem Button ... 801
... 14.14 Zwei Buttons in Box- und Form-Widget mit Textausgabe (Label-Widget) ... 808
... 14.15 editres - Widget-Hierarchie ... 812
... 14.16 Texteingabe mit Dialog-Widget ... 813
... 14.17 X-Toolkits meets Xlib ... 817
... 14.18 Zusammenfassung ... 820
15 GTK+ 821
... 15.1 Was ist GTK+? ... 821
... 15.2 GTK+-Anwendungen übersetzen ... 824
... 15.3 Eine Einführung in die Glib-Bibliothek ... 826
... 15.4 Grundlagen der GTK+-Programmierung ... 847
... (Events-)Verarbeitungsschleife ... 855
... 15.5 Fenster - GtkWindow ... 857
... 15.6 Anzeige-Elemente ... 864
... 15.7 Behälter ... 872
... 15.8 Buttons und Toogled-Buttons ... 885
... 15.9 Dateneingabe ... 894
... 15.10 Menü und Toolbar ... 904
... 15.11 Mehrzeiliger Text ... 923
... 15.12 Auswählen (Selection) ... 935
... 15.13 Events ... 944
... 15.14 Weitere Widget- und GTK+-Elemente im Überblick ... 950
16 SDL ... 953
... 16.1 Was ist und kann SDL? ... 953
... 16.2 SDL installieren ... 954
... 16.3 SDL-Anwendungen erstellen ... 954
... 16.4 SDL initialisieren und Videomodus einstellen ... 955
... 16.5 Direkt auf den Bildschirm zeichnen ... 958
... 16.6 Bitmap laden und anzeigen ... 963
... 16.7 Ein anderes Grafikformat laden und anzeigen ... 966
... 16.8 Der rechteckige Bildbereich von SDL ... 967
... 16.9 Farbenschlüssel, Transparenz und Alpha-Blending ... 971
... 16.10 Animation ... 972
... 16.11 Eingabe- und Ereignisverarbeitung ... 979
... 16.12 Audio ... 1001
... 16.13 Ausblick ... 1007
17 Werkzeuge für Programmierer ... 1009
... 17.1 Make ... 1016
... 17.2 Bibliotheken erstellen ... 1030
... 17.3 RPM ... 1039
... 17.4 RCS und CVS ... 1049
... 17.5 Zeitmessung von Programmen ... 1075
... 17.6 Debuggen mit gdb und ddd ... 1081
... 17.7 STRACE - Systemaufrufe verfolgen ... 1092
... 17.8 Memory Leaks und unerlaubte Speicherzugriffe ... 1094
... 17.9 Ausblick ... 1102
A Sicherheit unter Linux ... 1103
... A.1 Viren und Trojaner ... 1103
... A.2 Der Superuser (su) ... 1104
... A.3 Überlaufen von Logfiles ... 1104
... A.4 Zugriffsrechte auf Dateien ... 1104
... A.5 Das SUID-Bit ... 1105
... A.6 Programme ohne Ausführrechte ... 1106
... A.7 Buffer Overflow (Pufferüberlauf) ... 1107
... A.8 Race Condition ... 1109
... A.9 Temporäre Dateien ... 1110
... A.10 chroot ... 1111
... A.11 Umgebungsvariablen ... 1112
... A.12 Zugriffsrechte - häufig gemachte Fehler ... 1114
... A.13 system() und popen() ... 1114
... A.14 Offene Filedeskriptoren ... 1115
... A.15 Core Dump ... 1118
... A.16 SQL Injection ... 1119
... A.17 Filedeskriptor-Überlauf mit select() ... 1120
B Funktionsreferenz ... 1123
... B.1 ANSI C ... 1123
... B.2 ANSI C99 1144
... B.3 Elementare E/A-Funktionen ... 1151
... B.4 Fortgeschrittene Ein-/Ausgabe-Funktionen ... 1154
... B.5 Verzeichnisse ... 1160
... B.6 Attribute von Dateien und Verzeichnissen ... 1162
... B.7 Links ... 1165
... B.8 Prozess und Prozessverwaltungsfunktionen ... 1165
... B.9 Signale - Das neue Signalkonzept ... 1167
... B.10 Interprozesskommunikationen ... 1171
... B.11 Sys-V-Interprozesskommnunikationen ... 1172
... B.12 Threadprogrammierung ... 1174
... B.13 Netzwerkprogrammierung ... 1178
... B.14 MySQL C-API ... 1184
... B.15 PostgreSQL C-API ... 1190
... B.16 Weitere Funktionsreferenzen auf der Buch-CD ... 1194
C Inhalt der Buch-CD ... 1195