Linux-Unix-Programmierung
Rheinwerk (Verlag)
978-3-8362-3772-7 (ISBN)
- Titel erscheint in neuer Auflage
- Artikel merken
- Einstieg, Praxisbeispiele, Referenzen
- System-, Netzwerk- und Shellprogrammierung
- 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.
Zentrale Grundlagen und Techniken verstehen und anwenden
Ob Ein-/Ausgabe, Attribute, Systeminformationen, Prozesse, Dämonisierung, Interprozesskommunikation, Signale und Threadprogrammierung, Verbindung zur Hardware oder umfassendes Wissen zur Netzwerkprogrammierung – all das finden Sie hier.
Datenbankanwendungen programmieren
Je umfangreicher die Daten, desto sinnvoller ist es, diese in einer Datenbank zu speichern. Wie Sie das nach aktuellem Stand der Technik und strukturiert mit der Datenbank Ihrer Wahl umsetzen, lesen Sie im Buch.
Konsolenprogramme, GUIs und Shellprogrammierung
Einfach funktional (Konsolenanwendung) oder funktional und schick als GUI-Anwendung? Sie lernen, Bibliotheken für Konsolenanwendungen und grafische Oberflächen einzusetzen. Außerdem erfahren Sie, wie Sie sich mit Shellskripten unnötige (Programmier-)Arbeit ersparen können.
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
ürgen Wolf ist Softwareentwickler und Autor aus Leidenschaft, er programmiert seit Jahren auf Linux- und Unix-Systemen.
Klaus-Jürgen Wolf ist seit 1989 im IT-Umfeld tätig, vorwiegend als Entwickler (C, C++, Python, Java) und als Administrator (Linux/UNIX). Der ausgewiesene Spezialist aus dem Bereich der Linux- und Unix-Sicherheit hat dieses Standardwerk grundlegend aktualisiert und um weitere wertvolle Praxisbeispiele aus zahlreichen Projekten erweitert.
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.13 ... Prozesse synchronisieren ... 344
11. IPC -- Interprozesskommunikation ... 349
11.1 ... Unterschiedliche Techniken zur Interprozesskommunikation (IPC) im Überblick ... 350
11.2 ... Neuere Techniken ... 357
11.3 ... Gründe für IPC ... 358
11.4 ... Pipes ... 359
11.5 ... System-V-Interprozesskommunikation ... 400
11.6 ... Semaphore ... 402
11.7 ... Message Queues ... 411
11.8 ... Shared Memory ... 424
11.9 ... Das Dateisystem überwachen ... 435
12. Threads ... 439
12.1 ... Unterschiede zwischen Threads und Prozessen ... 439
12.2 ... Scheduling und Zustände von Threads ... 440
12.3 ... Die grundlegenden Funktionen zur Thread-Programmierung ... 442
12.4 ... Die Attribute von Threads und das Scheduling ... 453
12.5 ... Threads synchronisieren ... 459
12.6 ... Threads abbrechen (canceln) ... 487
12.7 ... Erzeugen von Thread-spezifischen Daten (TSD-Data) ... 492
12.8 ... pthread_once -- Codeabschnitt einmal ausführen ... 495
12.9 ... Thread-safe (thread-sichere Funktionen) ... 498
12.10 ... Threads und Signale ... 499
12.11 ... Zusammenfassung und Ausblick ... 504
13. Populäre Programmiertechniken unter Linux ... 505
13.1 ... Reguläre Ausdrücke ... 505
13.2 ... getopt: Kommandozeilenoptionen auswerten ... 513
13.3 ... Capabilities: Wenn root zu mächtig wäre ... 517
13.4 ... Lokalisierung mit gettext ... 522
13.5 ... mmap(): Dateien als Speicherbereich ... 526
13.6 ... Codedokumentation automatisch erzeugen lassen mit Doxygen ... 530
14. Netzwerkprogrammierung ... 533
14.1 ... Einführung ... 533
14.2 ... Aufbau von Netzwerken ... 534
14.3 ... TCP/IP -- Aufbau und Struktur ... 539
14.4 ... TCP-Sockets ... 543
14.5 ... Das Kommunikationsmodell für Sockets ... 544
14.6 ... Grundlegende Funktionen zum Zugriff auf die Socket-Schnittstelle ... 545
14.7 ... Aufbau eines Clientprogramms ... 553
14.8 ... Aufbau des Serverprogramms ... 558
14.9 ... IP-Adressen konvertieren, manipulieren und extrahieren ... 563
14.10 ... Namen und IP-Adressen umwandeln ... 570
14.11 ... Der Puffer ... 580
14.12 ... Standard-E/A-Funktionen verwenden ... 581
14.13 ... Parallele Server ... 582
14.14 ... Synchrones Multiplexing -- select() ... 598
14.15 ... POSIX-Threads und Netzwerkprogrammierung ... 620
14.16 ... Optionen für Sockets setzen bzw. erfragen ... 625
14.17 ... UDP ... 630
14.18 ... Unix-Domain-Sockets (IPC) ... 639
14.19 ... Multicast-Socket ... 645
14.20 ... Nichtblockierende I/O-Sockets ... 653
14.21 ... Etwas zu Streams, Raw Socket und TLI und XTI ... 656
14.22 ... Netzwerksoftware nach IPv6 portieren ... 659
14.23 ... Sicherheit ... 660
15. Abgesicherte Netzwerkverbindungen ... 663
15.1 ... Grundlagen ... 663
15.2 ... Server ... 666
15.3 ... Client ... 671
15.4 ... Referenz OpenSSL ... 675
16. Relationale Datenbanken: MySQL, PostgreSQL und SQLite ... 687
16.1 ... Relationales Datenbankdesign ... 688
16.2 ... Datenhaufen und indizierte Listen ... 690
16.3 ... SQL-Systeme im Überblick ... 691
16.4 ... Vorbereitungen ... 695
16.5 ... Beispiele in SQL ... 701
16.6 ... MySQL-C-Programmierschnittstelle ... 714
16.7 ... Beispiel eines Newssystems mit MySQL ... 757
16.8 ... Neue SQL-Funktionen für die Shell -- MySQL erweitern ... 787
16.9 ... MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 788
16.10 ... PostgreSQL -- Konfiguration ... 798
17. GTK+ ... 839
17.1 ... Was ist GTK+? ... 839
17.2 ... GTK+-Anwendungen übersetzen ... 843
17.3 ... Eine Einführung in die Glib-Bibliothek ... 843
17.4 ... Grundlagen der GTK+-Programmierung ... 867
17.5 ... Fenster -- GtkWindow ... 878
17.6 ... Anzeige-Elemente ... 886
17.7 ... Behälter ... 894
17.8 ... Buttons und Toggled-Buttons ... 908
17.9 ... Dateneingabe ... 917
17.10 ... Menü und Toolbar ... 929
17.11 ... Mehrzeiliger Text ... 948
17.12 ... Auswählen (Selection) ... 962
17.13 ... Events ... 973
17.14 ... Weitere Widget- und GTK+-Elemente im Überblick ... 979
18. Werkzeuge für Programmierer ... 983
18.1 ... Der Compiler GCC ... 984
18.2 ... Make ... 994
18.3 ... Das Makefile portabel machen ... 1011
18.4 ... Bibliotheken erstellen ... 1019
18.5 ... RPM ... 1029
18.6 ... Versionskontrollsysteme ... 1040
18.7 ... Zeitmessung an Programmen ... 1042
18.8 ... Debuggen mit GDB und DDD ... 1050
18.9 ... STRACE -- Systemaufrufe verfolgen ... 1062
18.10 ... Memory Leaks und unerlaubte Speicherzugriffe ... 1064
18.11 ... Ausblick ... 1072
19. Shell-Programmierung ... 1075
19.1 ... Was ist eine Shell und was kann sie? ... 1075
19.2 ... Was sind Shellskripte und wann ist ihr Einsatz sinnvoll? ... 1076
19.3 ... Wann brauche ich keine Shellskripte? ... 1077
19.4 ... Welche Schwierigkeiten sind typisch für Shellskripte? ... 1078
19.5 ... Verschiedene Shelltypen ... 1079
19.6 ... Shellskripts ausführen ... 1081
19.7 ... Vom Shellskript zum Prozess ... 1092
19.8 ... Einen Datenstrom (Stream) umleiten ... 1093
19.9 ... Ersatzmuster (Namen-Expansion) zur Suche verwenden ... 1101
19.10 ... Variablen ... 1105
19.11 ... Quotings ... 1130
19.12 ... Kommandozeilenargumente ... 1133
19.13 ... Kontrollstrukturen ... 1140
19.14 ... Terminal-Eingabe und -Ausgabe ... 1166
19.15 ... Funktionen ... 1192
19.16 ... Signale ... 1197
19.17 ... Prozess- und Skriptausführung ... 1201
19.18 ... Ein Shellskript bei der Ausführung ... 1209
A. Sicherheit unter Linux ... 1213
B. Funktionsreferenz ... 1239
C. Linux-Unix-Kommandoreferenz ... 1321
Index ... 1405
Erscheinungsdatum | 28.07.2016 |
---|---|
Reihe/Serie | Rheinwerk Computing |
Verlagsort | Bonn |
Sprache | deutsch |
Maße | 190 x 240 mm |
Gewicht | 2410 g |
Einbandart | gebunden |
Themenwelt | Informatik ► Betriebssysteme / Server ► Unix / Linux |
Schlagworte | Assembler • Bash • Buch • C programmieren • C Programmierung • Handbuch • Kofler • Linux • Linux Administration • Linux administrieren • Linux Datenbanken • Linux Mint • Linux programmieren • Linux Programmierung • Linux; Programmierung • Linux Server • Linux Unix • LPIC • Netzwerkprogrammierung • Shell • Shell Programmierung • Treiberprogrammierung • Ubuntu • UNIX; Programmierung |
ISBN-10 | 3-8362-3772-5 / 3836237725 |
ISBN-13 | 978-3-8362-3772-7 / 9783836237727 |
Zustand | Neuware |
Haben Sie eine Frage zum Produkt? |
aus dem Bereich