Linux-Unix-Programmierung

Inhaltsverzeichnis



  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

Linux-Unix-Programmierung

Das umfassende Handbuch

Buch (Gebundene Ausgabe)

49,90 €

inkl. gesetzl. MwSt.

Linux-Unix-Programmierung

Ebenfalls verfügbar als:

Gebundenes Buch

Gebundenes Buch

ab 49,90 €
eBook

eBook

ab 49,90 €

Artikel liefern lassen

Beschreibung

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

Details

Einband

Gebundene Ausgabe

Erscheinungsdatum

28.07.2016

Verlag

Rheinwerk

Seitenzahl

1435

Maße (L/B/H)

24,6/20,2/7,3 cm

Beschreibung

Details

Einband

Gebundene Ausgabe

Erscheinungsdatum

28.07.2016

Verlag

Rheinwerk

Seitenzahl

1435

Maße (L/B/H)

24,6/20,2/7,3 cm

Gewicht

2410 g

Auflage

4. überarbeitete Auflage

Reihe

Rheinwerk Computing

Sprache

Deutsch

ISBN

978-3-8362-3772-7

Das meinen unsere Kund*innen

0.0

0 Bewertungen

Informationen zu Bewertungen

Zur Abgabe einer Bewertung ist eine Anmeldung im Kund*innenkonto notwendig. Die Authentizität der Bewertungen wird von uns nicht überprüft. Wir behalten uns vor, Bewertungstexte, die unseren Richtlinien widersprechen, entsprechend zu kürzen oder zu löschen.

Verfassen Sie die erste Bewertung zu diesem Artikel

Helfen Sie anderen Kund*innen durch Ihre Meinung

Erste Bewertung verfassen

Unsere Kund*innen meinen

0.0

0 Bewertungen filtern

Weitere Artikel finden Sie in

Die Leseprobe wird geladen.
  • Linux-Unix-Programmierung


  •   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