Linux-Unix-Programmierung

Das umfassende Handbuch
Buch | Hardcover
1435 Seiten
2016 | 4. Auflage
Rheinwerk (Verlag)
978-3-8362-3772-7 (ISBN)

Lese- und Medienproben

Linux-Unix-Programmierung - Jürgen Wolf, Klaus-Jürgen Wolf
49,90 inkl. MwSt
  • 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
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?
Mehr entdecken
aus dem Bereich