49,90
versandkostenfrei*

Preis in Euro, inkl. MwSt.
Sofort lieferbar
0 °P sammeln

    Gebundenes Buch

Alles zur Systemprogrammierung
Einstieg, Praxisbeispiele, Referenzen System-, Netzwerk- und Shell-Programmierung Datenbanken, GUI-Bibliotheken, Werkzeuge, Sicherheit
Alles zur Systemprogrammierung unter Linux und Unix! Von E/A-Funktionen, Attributen von Dateien und Verzeichnissen, dem Zugriff auf Systeminformationen über Prozesse und Dämonprozesse, Signale, Interprozesskommunikation und Threads bis hin zu Netzwerkprogrammierung und Devices - als Entwickler mit soliden Kenntnissen von Linux-/Unix-Betriebssystemen und der Sprache C kommen Sie hier voll auf Ihre Kosten.
Aus dem
…mehr

Produktbeschreibung
Alles zur Systemprogrammierung

Einstieg, Praxisbeispiele, Referenzen
System-, Netzwerk- und Shell-Programmierung
Datenbanken, GUI-Bibliotheken, Werkzeuge, Sicherheit

Alles zur Systemprogrammierung unter Linux und Unix!
Von E/A-Funktionen, Attributen von Dateien und Verzeichnissen, dem Zugriff auf Systeminformationen über Prozesse und Dämonprozesse, Signale, Interprozesskommunikation und Threads bis hin zu Netzwerkprogrammierung und Devices - als Entwickler mit soliden Kenntnissen von Linux-/Unix-Betriebssystemen und der Sprache C kommen Sie hier voll auf Ihre Kosten.

Aus dem Inhalt:

Laufzeitumgebungen
Dynamische Daten in C
E/A-Funktionen
Attribute von Dateien und Verzeichnissen
Zugriff auf Systeminformationen
Devices - eine einfache Verbindung zur Hardware
System- und Benutzerdateien
Dämonen, Zombies und Prozesse
Signale
IPC - Interprozesskommunikation
Threads
Populäre Programmiertechniken unter Linux
Netzwerkprogrammierung
Abgesicherte Netzwerkverbindungen
Datenbanken (MySQL, PostgreSQL, SQLite)
GTK+
Werkzeuge für Programmierer
Shellprogrammierung
Extra-Kapitel zum Download: Terminal E/A und Benutzerschnittstellen für die Konsole
  • Produktdetails
  • Rheinwerk Computing
  • Verlag: Rheinwerk Verlag
  • 4., überarb. Aufl.
  • Seitenzahl: 1435
  • Erscheinungstermin: August 2016
  • Deutsch
  • Abmessung: 246mm x 202mm x 73mm
  • Gewicht: 2410g
  • ISBN-13: 9783836237727
  • ISBN-10: 3836237725
  • Artikelnr.: 44143212
Autorenporträt
Wolf, Jürgen
Jürgen Wolf ist Softwareentwickler, Digitalfotograf und Autor aus Leidenschaft. C/C++, Perl, Linux und die Bildbearbeitung mit Photoshop Elements und GIMP 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.
Inhaltsangabe
1. Einführung ... 25 1.1 ... Anforderung an den Leser ... 25 1.2 ... Das Betriebssystem ... 26 1.3 ... Schreibkonventionen ... 26 1.4 ... Notationsstil ... 27 1.5 ... Weitere Hilfen ... 28 2. Laufzeitumgebungen ... 29 2.1 ... Historisches ... 29 2.2 ... Distributionen und ihre Unterschiede ... 33 2.3 ... Die GNU-Toolchain ... 34 2.4 ... Paketmanagement ... 36 2.5 ... Der Compiler GCC -- eine kurze Einführung ... 37 2.6 ... POSIX, X/OPEN und ANSI C ... 42 3. Dynamische Daten in C ... 47 3.1 ... Speicher anfordern ... 47 3.2 ... Speicher verschieben und löschen ... 49 3.3 ... Zeichenketten und -funktionen ... 49 3.4 ... Zeichenkodierung ... 51 3.5 ... Müllsammler, Kanarienvögel und Sicherheit ... 54 4. E/A-Funktionen ... 57 4.1 ... Elementare E/A-Funktionen ... 57 4.2 ... Filedeskriptor ... 58 4.3 ... Funktionen, die den Filedeskriptor verwenden ... 61 4.4 ... Standard-E/A-Funktionen ... 106 4.5 ... Mit Verzeichnissen arbeiten ... 118 4.6 ... Fehlerbehandlung ... 140 4.7 ... Temporäre Dateien und Verzeichnisse ... 143 4.8 ... Ausblick ... 143 5. Attribute von Dateien und Verzeichnissen ... 145 5.1 ... Struktur stat ... 145 5.2 ... Erweiterte Attribute ... 161 6. Zugriff auf Systeminformationen ... 169 6.1 ... Das /sys-Dateisystem (sysfs) ... 169 6.2 ... Das /proc-Dateisystem (procfs) ... 171 6.3 ... Informationen aus dem /proc-Verzeichnis herausziehen ... 171 6.4 ... Hardware- bzw. Systeminformationen ermitteln ... 173 6.5 ... Prozessinformationen ... 179 6.6 ... Kernel-Informationen ... 184 6.7 ... Filesysteme ... 191 6.8 ... Weiterführendes ... 192 7. Devices -- eine einfache Verbindung zur Hardware ... 193 7.1 ... Die Gerätedateitypen ... 193 7.2 ... Die Gerätedateinummern ... 194 7.3 ... Historisches ... 195 7.4 ... Zugriff auf die Gerätedateien ... 196 7.5 ... Gerätenamen ... 197 7.6 ... Spezielle Gerätedateien ... 200 7.7 ... Gerätedateien in der Praxis einsetzen ... 201 8. System- und Benutzerdateien ... 219 8.1 ... Die Datei /etc/passwd ... 219 8.2 ... Die Datei /etc/shadow ... 225 8.3 ... Die Datei /etc/group ... 231 8.4 ... uname -- Informationen zum lokalen System erfragen ... 235 8.5 ... Das Verzeichnis /etc/skel und der Network Information Service (NIS) ... 237 8.6 ... Dateien für Netzwerkinformationen ... 238 8.7 ... Folgen für Entwickler ... 238 9. Dämonen, Zombies und Prozesse ... 241 9.1 ... Was ist ein Prozess? ... 241 9.2 ... Prozesskomponente ... 242 9.3 ... Prozesse überwachen -- ps, top, kpm ... 252 9.4 ... Lebenszyklus eines Prozesses ... 255 9.5 ... Umgebungsvariablen eines Prozesses ... 257 9.6 ... Ressourcenlimits eines Prozesses ... 265 9.7 ... Prozesserkennung ... 269 9.8 ... Erzeugung von Prozessen -- fork() ... 271 9.9 ... Warten auf einen Prozess ... 282 9.10 ... Die exec-Familie ... 289 9.11 ... Kommandoaufrufe aus dem Programm -- system() ... 295 9.12 ... Dämonen bzw. Hintergrundprozesse ... 296 9.13 ... Rund um die Ausführung von Prozessen ... 307 9.14 ... Zusammenfassung und Ausblick ... 324 10. Signale ... 325 10.1 ... Grundlagen zu den Signalen ... 325 10.2 ... Das neue Signalkonzept ... 331 10.3 ... Signalmenge initialisieren ... 332 10.4 ... Signalmenge hinzufügen oder löschen ... 333 10.5 ... Signale einrichten oder erfragen ... 333 10.6 ... Signal an den eigenen Prozess senden -- raise() ... 340 10.7 ... Signale an andere Prozesse senden -- kill() ... 340 10.8 ... Zeitschaltuhr einrichten -- alarm() ... 341 10.9 ... Prozesse stoppen, bis ein Signal eintritt -- pause() ... 342 10.10 ... Prozesse für eine bestimmte Zeit stoppen -- sleep() und usleep() ... 342 10.11 ... Signalmaske erfragen oder ändern -- sigprocmask() ... 343 10.12 ... Prozess während einer Änderung der Signalmaske stoppen -- sigsuspend() ... 344 10.

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