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. Neu in der 3. Auflage: ein Kapitel zur Shell-Programmierung und eine Kommandoreferenz.
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
Systeminformationen
Devices
GTK+
Galileo Press heißt jetzt Rheinwerk Verlag.
Rezensionen / Stimmen
»Die Bandbreite der Themen in diesem Wälzer reicht von der Systemprogrammierung, Interprozesskommunikation und Threadprogrammierung bis hin zum Übertragen von Daten über Netzwerke oder dem Einsatz von SQL-Datenbanken im Zusammenspiel mit C. Ein Kapitel über Shell-Programmierung runden den Inhalt ab.«
Reihe
Sprache
Verlagsort
Verlagsgruppe
Editions-Typ
Maße
ISBN-13
978-3-8362-1366-0 (9783836213660)
Schweitzer Klassifikation
... Vorwort des Autors ... 23
... ... Vorwort 2. Auflage ... 23
... ... Vorwort 3. Auflage ... 24
... ... Danksagung ... 24
... Vorwort der Fachgutachter ... 27
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 ... 32
... 1.5 ... Der Compiler GCC - eine kurze Einführung ... 33
... 1.6 ... POSIX, X/OPEN und ANSI C ... 37
... 1.7 ... Übersicht zum Buch ... 39
... 1.8 ... Schreibkonventionen ... 41
... 1.9 ... Notationsstil ... 42
... 1.10 ... Weitere Hilfen ... 42
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 ... 84
... 2.5 ... Mit Verzeichnissen arbeiten ... 94
... 2.6 ... Fehlerbehandlung ... 112
... 2.7 ... Ausblick ... 114
3 ... Attribute von Dateien und Verzeichnissen ... 115
... 3.1 ... Struktur stat ... 115
4 ... Zugriff auf Systeminformationen ... 129
... 4.1 ... Informationen aus dem /proc-Verzeichnis herausziehen ... 129
... 4.2 ... Hardware-/Systeminformationen ermitteln ... 131
... 4.3 ... Prozessinformationen ... 135
... 4.4 ... Kernel-Informationen ... 139
... 4.5 ... Filesysteme ... 146
... 4.6 ... Weiterführendes ... 146
5 ... Devices - eine einfache Verbindung zur Hardware ... 149
... 5.1 ... Die Gerätedateitypen ... 149
... 5.2 ... Die Gerätedateinummern ... 150
... 5.3 ... Zugriff auf die Gerätedateien ... 151
... 5.4 ... Gerätenamen ... 152
... 5.5 ... Spezielle Gerätedateien ... 153
... 5.6 ... Gerätedateien in der Praxis einsetzen ... 154
6 ... System- und Benutzerdateien ... 169
... 6.1 ... Die Datei /etc/passwd ... 169
... 6.2 ... Die Datei /etc/shadow ... 174
... 6.3 ... Die Datei /etc/group ... 179
... 6.4 ... uname - Informationen zum lokalen System erfragen ... 183
... 6.5 ... Das Verzeichnis /etc/skel und Network Information Service (NIS) ... 184
... 6.6 ... Dateien für Netzwerkinformationen ... 184
7 ... Dämonen, Zombies und Prozesse ... 187
... 7.1 ... Was ist ein Prozess? ... 187
... 7.2 ... Prozesskomponente ... 188
... 7.3 ... Prozesse überwachen - ps, top, kpm ... 196
... 7.4 ... Lebenszyklus eines Prozesses ... 198
... 7.5 ... Umgebungsvariablen eines Prozesses ... 200
... 7.6 ... Ressourcenlimits eines Prozesses ... 206
... 7.7 ... Prozesserkennung ... 209
... 7.8 ... Erzeugung von Prozessen - fork() ... 211
... 7.9 ... Warten auf einen Prozess ... 220
... 7.10 ... Die exec-Familie ... 226
... 7.11 ... Kommandoaufrufe aus dem Programm - system() ... 231
... 7.12 ... Dämonprozesse ... 232
... 7.13 ... Rund um die Ausführung von Prozessen ... 242
... 7.14 ... Zusammenfassung und Ausblick ... 254
8 ... Signale ... 255
... 8.1 ... Grundlage zu den Signalen ... 255
... 8.2 ... Das neue Signalkonzept ... 260
... 8.3 ... Signalmenge initialisieren ... 260
... 8.4 ... Signalmenge hinzufügen oder löschen ... 261
... 8.5 ... Signale einrichten oder erfragen ... 261
... 8.6 ... Signal an den eigenen Prozess senden - raise() ... 267
... 8.7 ... Signale an andere Prozesse senden - kill() ... 267
... 8.8 ... Zeitschaltuhr einrichten - alarm() ... 268
... 8.9 ... Prozesse stoppen, bis ein Signal eintritt - pause() ... 268
... 8.10 ... Prozesse für eine bestimmte Zeit stoppen - sleep() und usleep() ... 269
... 8.11 ... Signalmaske erfragen oder ändern - sigprocmask() ... 269
... 8.12 ... Prozess während einer Änderung der Signalmaske stoppen - sigsuspend() ... 270
... 8.13 ... Prozesse synchronisieren ... 271
9 ... IPC - Interprozesskommunikation ... 275
... 9.1 ... Unterschiedliche Interprozesskommunikations-Techniken im Überblick ... 276
... 9.2 ... Gründe für IPC ... 282
... 9.3 ... Pipes ... 283
... 9.4 ... System-V-Interprozesskommunikation ... 318
... 9.5 ... Semaphore ... 321
... 9.6 ... Message Queues ... 328
... 9.7 ... Shared Memory ... 339
10 ... Threads ... 349
... 10.1 ... Unterschiede zwischen Threads und Prozessen ... 349
... 10.2 ... Thread-Bibliotheken ... 350
... 10.3 ... Kernel- und User-Threads ... 351
... 10.4 ... Scheduling und Zustände von Threads ... 351
... 10.5 ... Die grundlegenden Funktionen zur Thread-Programmierung ... 352
... 10.6 ... Die Attribute von Threads und das Scheduling ... 362
... 10.7 ... Threads synchronisieren ... 367
... 10.8 ... Threads abbrechen (canceln) ... 391
... 10.9 ... Erzeugen von Thread-spezifischen Daten (TSD-Data) ... 395
... 10.10 ... pthread_once - Codeabschnitt einmal ausführen ... 398
... 10.11 ... Thread-safe (thread-sichere Funktionen) ... 400
... 10.12 ... Threads und Signale ... 401
... 10.13 ... Zusammenfassung und Ausblick ... 405
11 ... Netzwerkprogrammierung ... 407
... 11.1 ... Einführung ... 407
... 11.2 ... Aufbau von Netzwerken ... 408
... 11.3 ... TCP/IP - Aufbau und Struktur ... 411
... 11.4 ... TCP Socket ... 414
... 11.5 ... Kommunikationsmodell ... 415
... 11.6 ... Grundlegende Funktionen zum Zugriff auf die Socket-Schnittstelle ... 416
... 11.7 ... Aufbau eines Clientprogramms ... 424
... 11.8 ... Aufbau des Serverprogramms ... 427
... 11.9 ... IP-Adressen konvertieren, manipulieren und extrahieren ... 432
... 11.10 ... Namen und IP-Adressen umwandeln ... 438
... 11.11 ... Der Puffer ... 446
... 11.12 ... Standard-E/A-Funktionen verwenden ... 447
... 11.13 ... Parallele Server ... 448
... 11.14 ... Syncrones Multiplexing - select() ... 462
... 11.15 ... POSIX-Threads und Netzwerkprogrammierung ... 481
... 11.16 ... Optionen für Sockets setzen bzw. erfragen ... 485
... 11.17 ... UDP ... 489
... 11.18 ... Unix-Domain-Sockets (IPC) ... 496
... 11.19 ... Multicast-Socket ... 502
... 11.20 ... Nicht blockierende I/O-Sockets ... 509
... 11.21 ... Etwas zu Streams und TLI, Raw Socket, XTI ... 512
... 11.22 ... IPv4 und IPv6 ... 514
... 11.23 ... Netzwerksoftware nach IPv6 portieren ... 515
... 11.24 ... Sicherheit und Verschlüsselung ... 517
12 ... MySQL und PostgreSQL ... 519
... 12.1 ... Relationales Datenbanksystem ... 519
... 12.2 ... Relationaler Datenbankserver ... 521
... 12.3 ... SQL-Server im Überblick ... 522
... 12.4 ... MySQL ... 522
... 12.5 ... MySQL C-API ... 546
... 12.6 ... Beispiel eines Newssystems mit MySQL ... 583
... 12.7 ... Neue SQL-Funktionen für die Shell - MySQL erweitern ... 609
... 12.8 ... MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 610
... 12.9 ... PostgreSQL - objektrelationales Datenbankverwaltungssystem ... 619
13 ... Terminal E/A und Benutzerschnittstellen für die Konsole ... 653
... 13.1 ... termios ... 653
... 13.2 ... terminfo ... 671
... 13.3 ... ncurses - Halbgrafik ... 679
14 ... GTK+ ... 715
... 14.1 ... Was ist GTK+? ... 715
... 14.2 ... GTK+-Anwendungen übersetzen ... 719
... 14.3 ... Eine Einführung in die Glib-Bibliothek ... 720
... 14.4 ... Grundlagen der GTK+-Programmierung ... 741
... 14.5 ... Fenster - GtkWindow ... 750
... 14.6 ... Anzeige-Elemente ... 758
... 14.7 ... Behälter ... 765
... 14.8 ... Buttons und Toogled-Buttons ... 777
... 14.9 ... Dateneingabe ... 785
... 14.10 ... Menü und Toolbar ... 795
... 14.11 ... Mehrzeiliger Text ... 812
... 14.12 ... Auswählen (Selection) ... 824
... 14.13 ... Events ... 833
... 14.14 ... Weitere Widget- und GTK+-Elemente im Überblick ... 838
15 ... Übersicht über weitere beliebte GUIBibliotheken ... 841
... 15.1 ... gtkmm - GTK+ für C++ ... 841
... 15.2 ... wxWidget ... 845
... 15.3 ... FLTK ... 848
... 15.4 ... Qt ... 849
... 15.5 ... Die niedrige Ebene - X-Window-Programmierung ... 852
... 15.6 ... Multimediabibliotheken ... 852
16 ... Werkzeuge für Programmierer ... 859
... 16.1 ... Der Compiler gcc ... 859
... 16.2 ... Make ... 866
... 16.3 ... Bibliotheken erstellen ... 880
... 16.4 ... RPM ... 888
... 16.5 ... RCS und CVS ... 898
... 16.6 ... Zeitmessung von Programmen ... 923
... 16.7 ... Debuggen mit gdb und ddd ... 929
... 16.8 ... STRACE - Systemaufrufe verfolgen ... 939
... 16.9 ... Memory Leaks und unerlaubte Speicherzugriffe ... 942
... 16.10 ... Ausblick ... 948
17 ... Shellprogrammierung ... 951
... 17.1 ... Was ist eine Shell und was kann sie? ... 951
... 17.2 ... Was sind Shellskripts und wann ist ihr Einsatz sinnvoll? ... 951
... 17.3 ... Wann brauche ich keine Shellskripts? ... 953
... 17.4 ... Verschiedene Shelltypen ... 953
... 17.5 ... Shellskripts ausführen ... 955
... 17.6 ... Vom Shellskript zum Prozess ... 964
... 17.7 ... Datenstrom (Stream) umleiten ... 965
... 17.8 ... Ersatzmuster (Namen-Expansion) zur Suche verwenden ... 972
... 17.9 ... Variablen ... 976
... 17.10 ... Quotings ... 997
... 17.11 ... Kommandozeilenargumente ... 999
... 17.12 ... Kontrollstrukturen ... 1006
... 17.13 ... Terminal-Eingabe und -Ausgabe ... 1028
... 17.14 ... Funktionen ... 1050
... 17.15 ... Signale ... 1054
... 17.16 ... Prozess- und Skriptausführung ... 1058
... 17.17 ... Ein Shellskript bei der Ausführung ... 1065
A ... Sicherheit unter Linux ... 1067
... A.1 ... Viren und Trojaner ... 1067
... A.2 ... Der Superuser (su) ... 1068
... A.3 ... Überlaufen von Logfiles ... 1068
... A.4 ... Zugriffsrechte auf Dateien ... 1069
... A.5 ... Das SUID-Bit ... 1069
... A.6 ... Programme ohne Ausführrechte ... 1071
... A.7 ... Buffer Overflow (Pufferüberlauf) ... 1071
... A.8 ... Race Condition ... 1073
... A.9 ... Temporäre Dateien ... 1074
... A.10 ... chroot ... 1075
... A.11 ... Umgebungsvariablen ... 1076
... A.12 ... Zugriffsrechte - häufig gemachte Fehler ... 1079
... A.13 ... system() und popen() ... 1079
... A.14 ... Offene Filedeskriptoren ... 1080
... A.15 ... Core Dump ... 1082
... A.16 ... SQL Injection ... 1083
... A.17 ... Filedeskriptor-Überlauf mit select() ... 1085
B ... Funktionsreferenz ... 1087
... B.1 ... ANSI C ... 1087
... B.2 ... ANSI C99 ... 1105
... B.3 ... Elementare E/A-Funktionen ... 1112
... B.4 ... Fortgeschrittene E/A-Funktionen ... 1114
... B.5 ... Verzeichnisse ... 1120
... B.6 ... Attribute von Dateien und Verzeichnissen ... 1122
... B.7 ... Links ... 1124
... B.8 ... Prozess und Prozessverwaltungsfunktionen ... 1125
... B.9 ... Signale - Das neue Signalkonzept ... 1126
... B.10 ... Interprozesskommunikationen ... 1129
... B.11 ... Sys-V-Interprozesskommnunikationen ... 1130
... B.12 ... Threadprogrammierung ... 1132
... B.13 ... Netzwerkprogrammierung ... 1135
... B.14 ... MySQL C-API ... 1141
... B.15 ... PostgreSQL C-API ... 1146
... B.16 ... Weitere Funktionsreferenzen auf der Buch-CD ... 1149
C ... Linux-Unix-Kommandoreferenz ... 1151
... C.1 ... Dateiorientierte Kommandos ... 1151
... C.2 ... Verzeichnisorientierte Kommandos ... 1168
... C.3 ... Verwaltung von Benutzern und Gruppe ... 1169
... C.4 ... Programm- und Prozessverwaltung ... 1173
... C.5 ... Speicherplatzinformationen ... 1179
... C.6 ... Dateisystem-Kommandos ... 1180
... C.7 ... Archivierung und Backup ... 1190
... C.8 ... Systeminformationen ... 1202
... C.9 ... System-Kommandos ... 1203
... C.10 ... Druckeradministration ... 1205
... C.11 ... Netzwerkbefehle ... 1205
... C.12 ... Benutzerkommunikation ... 1216
... C.13 ... Bildschirm- und Terminalkommandos ... 1217
... C.14 ... Online-Hilfen ... 1219
... C.15 ... Alles rund um PostScript-Kommandos ... 1221
... C.16 ... Gemischte Kommandos ... 1221
D ... Inhalt der Buch-CD ... 1223