Marktplatzangebote
2 Angebote ab € 38,09 €
  • Gebundenes Buch

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
…mehr

Produktbeschreibung
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.

Inhaltsverzeichnis:
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
Autorenporträt
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.