Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
Diese 2. Auflage von Linux-UNIX-Programmierung wurde gründlich überarbeitet, aktualisiert und erweitert.

Nutzen Sie die HTML-Version des Buches zum Reinschnuppern oder als immer verfügbare Ergänzung zu Ihrem Buch.

Die gedruckte Version des Buches erhalten Sie in unserem Online-Shop - versandkostenfrei innerhalb Deutschlands und Österreichs.
Zum Online-Shop
Rheinwerk Computing

Vorwort des Autors

Vorwort 2. Auflage
Danksagung
Rheinwerk Computing

Vorwort der Fachgutachter

Rheinwerk Computing

1 Einführung

1.1 Anforderung an den Leser
1.2 Anforderung an das Betriebssystem
1.3 Von UNIX …
1.4 … zu Linux
1.5 Der Compiler GCC – eine kurze Einführung
  1.5.1 GCC erhöre uns – der Aufruf
  1.5.2 Was befiehlst du – Meister?
  1.5.3 Klassifikation der Dateitypen
1.6 POSIX, X/OPEN und ANSI C
1.7 Übersicht zum Buch
1.8 Schreibkonventionen
1.9 Notationsstil
1.10 Weitere Hilfen
Rheinwerk Computing

2 E/A-Funktionen

2.1 Elementare E/A-Funktionen
2.2 Filedeskriptor
  2.2.1 Verwaltung für offene Deskriptoren
2.3 Funktionen, die den Filedeskriptor verwenden
  2.3.1 Datei öffnen – open()
  2.3.2 Anlegen einer neuen Datei – creat()
  2.3.3 Datei schließen – close()
  2.3.4 Schreiben von Dateien – write()
  2.3.5 Lesen von Dateien – read()
  2.3.6 Schreib-/Lesezeiger positionieren – lseek()
  2.3.7 Duplizieren von Filedeskriptoren – dup() und dup2()
  2.3.8 Ändern oder Abfragen der Eigenschaften eines Filedeskriptors – fcntl()
  2.3.9 Record Locking – Sperren von Dateien einrichten
  2.3.10 Multiplexing E/A – select()
  2.3.11 Unterschiedliche Operationen – ioctl()
  2.3.12 Lesen und Schreiben mehrerer Puffer – writev() und readv()
  2.3.13 Übersicht zu weiteren Funktionen, die den Filedeskriptor verwenden
2.4 Standard-E/A-Funktionen
  2.4.1 Der FILE-Zeiger
  2.4.2 Öffnen und Schließen von Dateien
  2.4.3 Formatierte Ausgabe
  2.4.4 Formatierte Eingabe
  2.4.5 Binäres Lesen und Schreiben
  2.4.6 Zeichen- und zeilenweise Ein-/Ausgabe
  2.4.7 Status der Ein-/Ausgabe überprüfen
  2.4.8 Stream positionieren
  2.4.9 Puffer kontrollieren
  2.4.10 Datei löschen und umbenennen
  2.4.11 Temporäre Dateien erstellen
2.5 Mit Verzeichnissen arbeiten
  2.5.1 Ein neues Verzeichnis anlegen – mkdir()
  2.5.2 In ein Verzeichnis wechseln – chdir(), fchdir()
  2.5.3 Ein leeres Verzeichnis löschen – rmdir()
  2.5.4 Format eines Datei-Eintrags in struct dirent
  2.5.5 Einen Verzeichnisstream öffnen – opendir()
  2.5.6 Lesen aus dem DIR-Stream – opendir() und Schließen des DIR-Streams – closedir()
  2.5.7 Positionieren des DIR-Streams
  2.5.8 Komplettes Verzeichnis einlesen – scandir()
  2.5.9 Ganze Verzeichnisbäume durchlaufen – ftw()
2.6 Fehlerbehandlung
2.7 Ausblick
Rheinwerk Computing

3 Attribute von Dateien und Verzeichnissen

3.1 Struktur stat
  3.1.1 Dateiart und Zugriffsrechte einer Datei erfragen – st_mode
  3.1.2 User-ID-Bit und Group-ID-Bit – st_uid und st_gid
  3.1.3 Inode ermitteln – st_ino
  3.1.4 Linkzähler – st_nlink
  3.1.5 Größe der Datei – st_size
  3.1.6 st_atime, st_mtime, st_ctime
Rheinwerk Computing

4 Zugriff auf Systeminformationen

4.1 Informationen aus dem /proc-Verzeichnis herausziehen
4.2 Hardware-/Systeminformationen ermitteln
  4.2.1 CPU-Informationen – /proc/cpuinfo
  4.2.2 Geräteinformationen – /proc/devices
  4.2.3 PCI-Bus – /proc/pci (nicht 2.6)
  4.2.4 Speicherauslastung – /proc/meminfo
  4.2.5 Weitere Hardware-Informationen zusammengefasst
4.3 Prozessinformationen
  4.3.1 /proc/$pid/cmdline
  4.3.2 /proc/$pid/environ
  4.3.3 /proc/self
  4.3.4 /proc/$pid/fd/
  4.3.5 /proc/$pid/statm
4.4 Kernel-Informationen
  4.4.1 /proc/locks
  4.4.2 /proc/modules
4.5 Filesysteme
  4.5.1 /proc/mounts
4.6 Weiterführendes
Rheinwerk Computing

5 Devices – eine einfache Verbindung zur Hardware

5.1 Die Gerätedateitypen
5.2 Die Gerätedateinummern
5.3 Zugriff auf die Gerätedateien
5.4 Gerätenamen
5.5 Spezielle Gerätedateien
5.6 Gerätedateien in der Praxis einsetzen
  5.6.1 CD auswerfen und wieder schließen
  5.6.2 CD-ROM-Fähigkeiten
  5.6.3 Audio-CD abspielen – komplett und einzelne Tracks – Pause, Fortfahren und Stopp
  5.6.4 Aktuellen Status der Audio-CD ermitteln
  5.6.5 Das komplette Listing
Rheinwerk Computing

6 System- und Benutzerdateien

6.1 Die Datei /etc/passwd
  6.1.1 Die Datei /etc/passwd auswerten
  6.1.2 getpwuid und getpwnam – einzelne Abfrage von /etc/passwd
  6.1.3 getpwent, setpwent und endpwent – komplette Abfrage von /etc/passwd
6.2 Die Datei /etc/shadow
  6.2.1 Die Datei /etc/shadow auswerten
  6.2.2 getspent, setspent und endspent – komplette Abfrage von /etc/shadow
6.3 Die Datei /etc/group
  6.3.1 Die Datei /etc/group auswerten
  6.3.2 getgrnam und getgrgid – einzelne Einträge aus /etc/group abfragen
  6.3.3 getgrent, setgrent und endgrent – alle Einträge in /etc/group abfragen
6.4 uname – Informationen zum lokalen System erfragen
6.5 Das Verzeichnis /etc/skel und Network Information Service (NIS)
6.6 Dateien für Netzwerkinformationen
Rheinwerk Computing

7 Dämonen, Zombies und Prozesse

7.1 Was ist ein Prozess?
7.2 Prozesskomponente
  7.2.1 Prozessnummer (PID)
  7.2.2 Prozessnummer des Vaterprozesses (PPID)
  7.2.3 Benutzer- und Gruppennummer eines Prozesses (UID, EUID, GID, EGID)
  7.2.4 Prozessstatus
  7.2.5 Prozesspriorität
  7.2.6 Timesharing-Prozesse
  7.2.7 Prozessauslagerung
  7.2.8 Steuerterminal
7.3 Prozesse überwachen – ps, top, kpm
7.4 Lebenszyklus eines Prozesses
7.5 Umgebungsvariablen eines Prozesses
  7.5.1 Einzelne Umgebungsvariablen abfragen
  7.5.2 Umgebungsvariable verändern oder hinzufügen – putenv() und setenv()
  7.5.3 Löschen von Umgebungsvariablen – unsetenv() und clearenv()
7.6 Ressourcenlimits eines Prozesses
  7.6.1 Mehr Sicherheit mit Ressourcenlimits
7.7 Prozesserkennung
7.8 Erzeugung von Prozessen – fork()
  7.8.1 Pufferung
  7.8.2 Was wird vererbt und was nicht?
  7.8.3 Einen Prozess mit veränderter Priorität erzeugen
7.9 Warten auf einen Prozess
7.10 Die exec-Familie
  7.10.1 execl()
  7.10.2 execve()
  7.10.3 execv()
  7.10.4 execle()
  7.10.5 execlp()
  7.10.6 execvp()
  7.10.7 Kindprozesse mit exec-Aufruf überlagern
7.11 Kommandoaufrufe aus dem Programm – system()
7.12 Dämonprozesse
  7.12.1 Wie ein Prozess zum Dämon wird ...
  7.12.2 Dämon, sprich mit uns ...
  7.12.3 Protokollieren von Dämonen – syslog()
  7.12.4 syslog() in der Praxis
  7.12.5 Den Dämon, den ich rief ...
7.13 Rund um die Ausführung von Prozessen
  7.13.1 Einen Dämon beim Booten mit einem init-Skript starten
  7.13.2 Hintergrundprozesse und Jobkontrolle
  7.13.3 Prozesse zeitgesteuert ausführen (cron-Jobs)
7.14 Zusammenfassung und Ausblick
Rheinwerk Computing

8 Signale

8.1 Grundlage zu den Signalen
  8.1.1 Signalmaske
  8.1.2 Signale und fork()
  8.1.3 Signale und exec
  8.1.4 Übersicht zu den Signalen
8.2 Das neue Signalkonzept
  8.2.1 Wozu ein »neues« Signalkonzept?
8.3 Signalmenge initialisieren
8.4 Signalmenge hinzufügen oder löschen
8.5 Signale einrichten oder erfragen
  8.5.1 Einen Signalhandler einrichten, der zurückkehrt
8.6 Signal an den eigenen Prozess senden – raise()
8.7 Signale an andere Prozesse senden – kill()
8.8 Zeitschaltuhr einrichten – alarm()
8.9 Prozesse stoppen, bis ein Signal eintritt – pause()
8.10 Prozesse für eine bestimmte Zeit stoppen – sleep() und usleep()
8.11 Signalmaske erfragen oder ändern – sigprocmask()
8.12 Prozess während einer Änderung der Signalmaske stoppen – sigsuspend()
8.13 Prozesse synchronisieren
Rheinwerk Computing

9 IPC – Interprozesskommunikation

9.1 Unterschiedliche Interprozesskommunikations-Techniken im Überblick
  9.1.1 (Namenlose) Pipes
  9.1.2 Benannte Pipes (FIFO-Pipes)
  9.1.3 Message Queue (Nachrichtenspeicher)
  9.1.4 Semaphore
  9.1.5 Shared Memory (gemeinsamer Speicher)
  9.1.6 STREAMS
  9.1.7 Sockets
  9.1.8 Lock Files (Sperrdateien)
  9.1.9 Dateisperren (Record Locking)
9.2 Gründe für IPC
9.3 Pipes
  9.3.1 Eigenschaften von Pipes
  9.3.2 Pipes einrichten – pipe()
  9.3.3 Eigenschaften von elementaren E/A-Funktionen bei Pipes
  9.3.4 Standard-E/A-Funktionen mit pipe
  9.3.5 Pipes in einen anderen Prozess umleiten
  9.3.6 Filterprogramm erstellen mithilfe einer Pipe
  9.3.7 Einrichten einer Pipe zu einem anderen Prozess – popen()
  9.3.8 Mail versenden mit Pipes und Sendmail
  9.3.9 Drucken über eine Pipe mit lpr
  9.3.10 Benannte Pipes – FIFOs
9.4 System-V-Interprozesskommunikation
  9.4.1 Gemeinsamkeiten der SysV-Mechanismen
  9.4.2 Ein Objekt einrichten, eine Verbindung herstellen und das Objekt wieder löschen
  9.4.3 Datenaustausch zwischen nicht verwandten Prozessen
9.5 Semaphore
  9.5.1 Lebenszyklus eines Semaphors
  9.5.2 Ein Semaphor öffnen oder erstellen – semget()
  9.5.3 Abfragen, Ändern oder Löschen der Semaphormenge – semctl()
  9.5.4 Operationen auf Semaphormengen – semop()
  9.5.5 Semaphore im Vergleich mit Sperren
9.6 Message Queues
  9.6.1 Eine Message Queue öffnen oder erzeugen – msgget()
  9.6.2 Nachrichten versenden – msgsnd()
  9.6.3 Eine Nachricht empfangen – msgrcv()
  9.6.4 Abfragen, Ändern oder Löschen einer Message Queue – msgctl()
9.7 Shared Memory
  9.7.1 Ein Shared-Memory-Segment erstellen oder öffnen – shmget()
  9.7.2 Ein Shared-Memory-Segment abfragen, ändern oder löschen – shmctl()
  9.7.3 Ein Shared-Memory-Segment anbinden (attach) – shmat()
  9.7.4 Ein Shared-Memory-Segment loslösen – shmdt()
  9.7.5 Client-Server-Beispiel – Shared Memory
Rheinwerk Computing

10 Threads

10.1 Unterschiede zwischen Threads und Prozessen
10.2 Thread-Bibliotheken
10.3 Kernel- und User-Threads
10.4 Scheduling und Zustände von Threads
10.5 Die grundlegenden Funktionen zur Thread–Programmierung
  10.5.1 pthread_create – einen neuen Thread erzeugen
  10.5.2 pthread_exit – einen Thread beenden
  10.5.3 pthread_join – auf das Ende eines Threads warten
  10.5.4 pthread_self – die ID von Threads ermitteln
  10.5.5 pthread_equal – die ID von zwei Threads vergleichen
  10.5.6 pthread_detach – einen Thread unabhängig machen
10.6 Die Attribute von Threads und das Scheduling
10.7 Threads synchronisieren
  10.7.1 Mutexe
  10.7.2 Condition-Variablen (Bedingungsvariablen)
  10.7.3 Semaphore
  10.7.4 Weitere Synchronisationstechniken im Überblick
10.8 Threads abbrechen (canceln)
10.9 Erzeugen von Thread-spezifischen Daten (TSD-Data)
10.10 pthread_once – Codeabschnitt einmal ausführen
10.11 Thread-safe (thread-sichere Funktionen)
10.12 Threads und Signale
10.13 Zusammenfassung und Ausblick
Rheinwerk Computing

11 Netzwerkprogrammierung

11.1 Einführung
11.2 Aufbau von Netzwerken
  11.2.1 ISO/OSI und TCP/IP – Referenzmodell
  11.2.2 Das World Wide Web (Internet)
11.3 TCP/IP – Aufbau und Struktur
  11.3.1 Netzwerkschicht (Datenübertragung)
  11.3.2 Internetschicht
  11.3.3 Transportschicht (TCP, UDP)
  11.3.4 Anwendungsschicht
11.4 TCP Socket
11.5 Kommunikationsmodell
11.6 Grundlegende Funktionen zum Zugriff auf die Socket-Schnittstelle
  11.6.1 Ein Socket anlegen – socket()
  11.6.2 Verbindungsaufbau – connect()
  11.6.3 Socket mit einer Adresse verknüpfen – bind()
  11.6.4 Auf Verbindungen warten – listen() und accept()
  11.6.5 Senden und Empfangen von Daten (1) – write() und read()
  11.6.6 Senden und Empfangen von Daten (2) – send() und recv()
  11.6.7 Verbindung schließen – close()
11.7 Aufbau eines Clientprogramms
  11.7.1 Zusammenfassung: Clientanwendung und Quellcode
11.8 Aufbau des Serverprogramms
  11.8.1 Zusammenfassung: Serveranwendung und Quellcode
11.9 IP-Adressen konvertieren, manipulieren und extrahieren
  11.9.1 inet_aton(), inet_pton() und inet_addr()
  11.9.2 inet_ntoa() und inet_ntop()
  11.9.3 inet_network()
  11.9.4 inet_netof()
  11.9.5 inet_lnaof()
  11.9.6 inet_makeaddr()
11.10 Namen und IP-Adressen umwandeln
  11.10.1 Name-Server
  11.10.2 Informationen zum Rechner im Netz – gethostbyname und gethostbyaddr
  11.10.3 Service-Informationen – getservbyname() und getservbyport()
11.11 Der Puffer
11.12 Standard-E/A-Funktionen verwenden
  11.12.1 Pufferung von Standard-E/A-Funktionen
11.13 Parallele Server
11.14 Syncrones Multiplexing – select()
11.15 POSIX-Threads und Netzwerkprogrammierung
11.16 Optionen für Sockets setzen bzw. erfragen
  11.16.1 setsockopt()
  11.16.2 getsockopt()
  11.16.3 Socket-Optionen
11.17 UDP
  11.17.1 Clientanwendung
  11.17.2 Serveranwendung
  11.17.3 recvfrom() und sendto()
  11.17.4 bind() verwenden oder weglassen
11.18 UNIX-Domain-Sockets (IPC)
  11.18.1 Die Adressstruktur von UNIX-Domain-Sockets
  11.18.2 Lokale Sockets erzeugen – socketpair()
11.19 Multicast-Socket
  11.19.1 Anwendungsgebiete von Multicast-Verbindungen
11.20 Nicht blockierende I/O-Sockets
11.21 Etwas zu Streams und TLI, Raw Socket, XTI
  11.21.1 Raw Socket
  11.21.2 TLI und XTI
  11.21.3 RPC (Remote Procedure Call)
11.22 IPv4 und IPv6
  11.22.1 IPv6 – ein wenig genauer
11.23 Netzwerksoftware nach IPv6 portieren
  11.23.1 Konstanten
  11.23.2 Strukturen
  11.23.3 Funktionen
11.24 Sicherheit und Verschlüsselung
Rheinwerk Computing

12 MySQL und PostgreSQL

12.1 Relationales Datenbanksystem
12.2 Relationaler Datenbankserver
12.3 SQL-Server im Überblick
12.4 MySQL
  12.4.1 Anwendungsgebiete von MySQL
  12.4.2 Schnittstellen von MySQL
  12.4.3 Installation von MySQL
  12.4.4 MySQL-Server starten und stoppen
  12.4.5 Konfigurationsdatei my.cnf
  12.4.6 Kommandozeilenwerkzeuge für und von mysql
  12.4.7 Grafische Clients
  12.4.8 MySQL-Crashkurs
  12.4.9 Datentypen
  12.4.10 Datenbank anlegen, verwenden und löschen
  12.4.11 Tabelle anlegen
  12.4.12 Schlüsselfelder (Tabellen anlegen)
  12.4.13 Indizes
  12.4.14 Tabellentypen (Tabellen anlegen)
  12.4.15 Autowerte definieren
  12.4.16 Tabellen umbenennen und ändern
  12.4.17 Daten einfügen, ändern und löschen
  12.4.18 Daten importieren
  12.4.19 Datenausgabe
  12.4.20 NULL ist 0 oder undefiniert?
  12.4.21 Unscharfe Suche
12.5 MySQL C-API
  12.5.1 Verbindung mit dem MySQL-Server aufbauen
  12.5.2 Aufgetretene Fehler ermitteln – mysql_errno() und mysql_error()
  12.5.3 Schließt die Verbindung zum Server – mysql_close()
  12.5.4 Erstes Beispiel
  12.5.5 Verschiedene Informationen ermitteln
  12.5.6 Datenbanken, Tabellen und Felder ausgeben (MYSQL_RES)
  12.5.7 Ergebnismenge zeilenweise bearbeiten (MYSQL_ROW)
  12.5.8 Ergebnismenge spaltenweise einlesen (und ausgeben) (MYSQL_FIELD)
  12.5.9 Ein Beispiel
  12.5.10 Ergebnismenge – weitere Funktionen
  12.5.11 Befehle an den Server – mysql_query() und mysql_real_query()
  12.5.12 Weitere Funktionen
  12.5.13 Veraltete Funktionen
  12.5.14 Neue Funktionen ab Version 4.1.x
12.6 Beispiel eines Newssystems mit MySQL
  12.6.1 Die Headerdatei my_cgi.h
  12.6.2 (Pseudo-)Planung
  12.6.3 Datenbank und Tabellen anlegen
  12.6.4 MySQL-Clients mit GUI
  12.6.5 Randnotiz
12.7 Neue SQL-Funktionen für die Shell – MySQL erweitern
12.8 MySQL-Funktionen mit der UDF-Schnittstelle entwerfen
  12.8.1 UDF-Sequenzen
  12.8.2 UDF_INIT-Struktur
  12.8.3 UDF_ARGS-Struktur
  12.8.4 Rückgabewert
  12.8.5 Benutzerdefinierte Funktionen erstellen
  12.8.6 Benutzerdefinierte Funktion kompilieren, installieren und ausführen
12.9 PostgreSQL – objektrelationales Datenbankverwaltungssystem
  12.9.1 PostgreSQL im Vergleich zu MySQL
  12.9.2 Unterschiede in der Syntax zwischen MySQL und PostgreSQL
  12.9.3 PostgreSQL installieren
  12.9.4 Konfigurationsdateien bei PostgreSQL – (postgresql.conf, pg_hba_conf)
  12.9.5 CRASHKURS PostgreSQL
  12.9.6 PostgreSQL C-API – libpg
  12.9.7 Umgebungsvariablen und Passwortdatei
  12.9.8 PostgreSQL und Threads
  12.9.9 Ausblick
Rheinwerk Computing

13 Terminal E/A und Benutzerschnittstellen für die Konsole

13.1 termios
  13.1.1 Terminalattribute bearbeiten
  13.1.2 Flags setzen und löschen
  13.1.3 Terminalidentifizierung
  13.1.4 Geschwindigkeitskontrolle – Baudrate von Terminals einstellen
13.2 terminfo
  13.2.1 terminfo verwenden
  13.2.2 terminfo initialisieren – setupterm()
  13.2.3 Eigenschaften eines Terminals (Finden von capnames) – tigetflag(), tigetnum() und tigetstr()
  13.2.4 Mit terminfo-Eigenschaften arbeiten – putp(), tputs(), tparm()
13.3 ncurses – Halbgrafik
  13.3.1 ncurses initialisieren
  13.3.2 Tastaturmodus und Ein- und Ausgabe
  13.3.3 Eigenschaft der Fenster
  13.3.4 Scrolling
  13.3.5 Attribute und Farben setzen
  13.3.6 Fensterroutinen
  13.3.7 Mausprogrammierung mit ncurses
Rheinwerk Computing

14 Xlib – X Window-Programmierung

14.1 Architektur von X
  14.1.1 Pufferung
  14.1.2 Ressourcen
14.2 X Toolkit
14.3 Der Window-Manager
14.4 Fenster mit X
  14.4.1 Verbindung herstellen
  14.4.2 Fenster definieren
  14.4.3 Informationen für den Window-Manager
  14.4.4 Fenster anzeigen
  14.4.5 Fenster und X-Verbindung beenden
  14.4.6 Das Grundgerüst als Quellcode
14.5 Events
  14.5.1 Event-Maske setzen
  14.5.2 Event-Bearbeitungsschleife
  14.5.3 Abarbeitung der Events
  14.5.4 Tastatur-Event
  14.5.5 Mausbutton-Event
  14.5.6 Expose-Event
  14.5.7 EnterWindowMask – LeaveWindowMask
  14.5.8 Listing zu den Events
14.6 Grafik mit X
  14.6.1 Grafikprimitive – Zeichenfunktionen
14.7 Text mit X
  14.7.1 Fonts benutzen
  14.7.2 Übersicht zu den Fonts
  14.7.3 Höhe und Breite ermitteln
  14.7.4 Listing mit Textausgabe
14.8 Farben mit X
14.9 Beispiel – ein Button mit X
14.10 Wozu kann ich denn nun die Xlib in der Praxis verwenden?
14.11 X und X-Toolkits – Einführung
14.12 Toolkit-Programmierung
  14.12.1 Widgets
14.13 Ein einfaches Fenster mit einem Button
  14.13.1 Ressourcen
14.14 Zwei Buttons in Box- und Form-Widget mit Textausgabe (Label-Widget)
14.15 editres – Widget-Hierarchie
14.16 Texteingabe mit Dialog-Widget
14.17 X-Toolkits meets Xlib
14.18 Zusammenfassung
Rheinwerk Computing

15 GTK+

15.1 Was ist GTK+?
  15.1.1 Was sind GDK und Glib?
  15.1.2 Schnittstellen von GTK+ zu anderen Programmiersprachen
  15.1.3 GTK+ und GNOME
  15.1.4 GTK+ Version 1.2 und 2.x
  15.1.5 GTK+-Aufbau des Kapitels
15.2 GTK+-Anwendungen übersetzen
15.3 Eine Einführung in die Glib-Bibliothek
  15.3.1 Datentypen
  15.3.2 Routinen
  15.3.3 Assertions-Funktionen
  15.3.4 Speicherverwaltung
  15.3.5 Stringbearbeitung
  15.3.6 Selbstverwaltender Stringpuffer
  15.3.7 Timer
  15.3.8 Dynamische Arrays
  15.3.9 Listen, Hashtabellen und binäre Bäume
  15.3.10 Ausblick Glib
15.4 Grundlagen der GTK+-Programmierung
  15.4.1 Die Umgebung initialisieren
  15.4.2 Widgets erzeugen und ggf. die Attribute setzen
  15.4.3 Eine Callback-Funktion einrichten, um Events abzufangen
  15.4.4 Eine GTK+-Anwendung beenden
  15.4.5 Die hierarchische Anordnung der Widgets definieren
  15.4.6 Widgets anzeigen
  15.4.7 Signale und Events abfangen und bearbeiten – (Events-)Verarbeitungsschleife
  15.4.8 GTK+ und Umlaute (Zeichenkodierung)
15.5 Fenster – GtkWindow
  15.5.1 Dialogfenster (Dialogboxen)
  15.5.2 GtkMessageDialog
15.6 Anzeige-Elemente
  15.6.1 Text – GtkLabel
  15.6.2 Trennlinie – GtkSeparator
  15.6.3 Grafiken – GtkImage
  15.6.4 Statusleiste – GtkStatusbar
  15.6.5 Fortschrittsbalken – GtkProgressBar
15.7 Behälter
  15.7.1 Boxen – GtkBox
  15.7.2 Aufteilungen, Register und Button-Box
  15.7.3 Tabellen – GtkTable
  15.7.4 Ausrichtung – GtkAlignment
15.8 Buttons und Toogled-Buttons
  15.8.1 Buttons allgemein
  15.8.2 Radio-Buttons (GtkRadioButton)
  15.8.3 GtkRadioButton, GtkCheckButton und GtkToggleButton
  15.8.4 Signale für Buttons (GtkButton)
15.9 Dateneingabe
  15.9.1 Textfelder – GtkEntry
  15.9.2 Schieberegler – GtkScale
  15.9.3 Zahlenfelder – GtkSpinButton
  15.9.4 Einstellungen – GtkAdjustment
  15.9.5 GtkEditable
15.10 Menü und Toolbar
  15.10.1 Menü – GtkItemFactory
  15.10.2 Toolbar – GtkToolbar
  15.10.3 Options-Menü – GtkOptionsMenu
  15.10.4 Combo-Boxen – GtkCombo
15.11 Mehrzeiliger Text
  15.11.1 Text(editor) – GtkTextView, GtkTextBuffer
  15.11.2 Scrollendes Fenster – GtkScrolledWindow
15.12 Auswählen (Selection)
  15.12.1 Dateiauswahl – GtkFileSelection
15.13 Events
15.14 Weitere Widget- und GTK+-Elemente im Überblick
Rheinwerk Computing

16 SDL

16.1 Was ist und kann SDL?
16.2 SDL installieren
16.3 SDL-Anwendungen erstellen
16.4 SDL initialisieren und Videomodus einstellen
  16.4.1 Programmbeispiel – SDL initialisieren und Videomodus einstellen
16.5 Direkt auf den Bildschirm zeichnen
  16.5.1 Programmbeispiel – direkt auf den Bildschirm zeichnen
16.6 Bitmap laden und anzeigen
  16.6.1 Programmbeispiel – Bitmap laden und anzeigen
16.7 Ein anderes Grafikformat laden und anzeigen
16.8 Der rechteckige Bildbereich von SDL
16.9 Farbenschlüssel, Transparenz und Alpha-Blending
  16.9.1 Alpha-Blending
16.10 Animation
  16.10.1 Programmbeispiel – Animation
16.11 Eingabe- und Ereignisverarbeitung
  16.11.1 SDL-Event-Struktur
  16.11.2 Maus-Events
  16.11.3 Programmbeispiel – Maus-Event
  16.11.4 Tastatur-Events
  16.11.5 Programmbeispiel – Tastatur-Events
  16.11.6 Joystick-Events
  16.11.7 Programmbeispiel – Joystick-Events
  16.11.8 Weitere Events
16.12 Audio
  16.12.1 Programmbeispiel – Audio
16.13 Ausblick
Rheinwerk Computing

17 Werkzeuge für Programmierer

  17.0.1 Der Compiler gcc
  17.0.2 Standardgebrauch des gcc
  17.0.3 Linken von Programmbibliotheken
  17.0.4 Dateien, die GCC kennt
  17.0.5 Ausgabedateien bei jedem einzelnen Schritt der Übersetzung erstellen
  17.0.6 Noch mehr Optionen
  17.0.7 Optionen für Warnmeldungen
  17.0.8 Präprozessor-Optionen
  17.0.9 Debuggen und Profiling
  17.0.10 Optimierungsflags
17.1 Make
  17.1.1 Erzeugen eines Makefiles
  17.1.2 Variablen, Makros und Abkürzungen
  17.1.3 Implizite Regeln
  17.1.4 Musterregeln
  17.1.5 make zur Installation verwenden
  17.1.6 make-Optionen
  17.1.7 Ausblick
17.2 Bibliotheken erstellen
  17.2.1 Statische Bibliotheken erstellen
  17.2.2 Dynamische Bibliotheken (Shared Libraries) erstellen
  17.2.3 Dynamisches Nachladen von Bibliotheken
17.3 RPM
  17.3.1 Verzeichnisse, die RPM benötigt
  17.3.2 Ein eigenes RPM-Paket erstellen
  17.3.3 Sources
  17.3.4 Die Spec-Datei
  17.3.5 Paket erstellen
  17.3.6 Das Paket installieren
17.4 RCS und CVS
  17.4.1 Software-Configuration-Management-Systeme (SCM)
  17.4.2 RCS
  17.4.3 CVS
17.5 Zeitmessung von Programmen
  17.5.1 Einfache Zeitmessung mit TIME – Laufzeit von Prozessen
  17.5.2 Profiling mit GPROF – Laufzeit von Funktionen
  17.5.3 Analyse mit GCOV
17.6 Debuggen mit gdb und ddd
17.7 STRACE – Systemaufrufe verfolgen
17.8 Memory Leaks und unerlaubte Speicherzugriffe
  17.8.1 efence
  17.8.2 valgrind
17.9 Ausblick
Rheinwerk Computing

A Sicherheit unter Linux

A.1 Viren und Trojaner
A.2 Der Superuser (su)
A.3 Überlaufen von Logfiles
A.4 Zugriffsrechte auf Dateien
A.5 Das SUID-Bit
A.6 Programme ohne Ausführrechte
A.7 Buffer Overflow (Pufferüberlauf)
A.8 Race Condition
A.9 Temporäre Dateien
A.10 chroot
A.11 Umgebungsvariablen
A.12 Zugriffsrechte – häufig gemachte Fehler
A.13 system() und popen()
A.14 Offene Filedeskriptoren
A.15 Core Dump
A.16 SQL Injection
A.17 Filedeskriptor-Überlauf mit select()
Rheinwerk Computing

B Funktionsreferenz

B.1 ANSI C
  B.1.1 <assert.h> – Testmöglichkeiten in einem Programm
  B.1.2 <ctype.h> – Zeichenklassifizierung/Umwandlung
  B.1.3 <errno.h> – Fehler-Konstanten
  B.1.4 <float.h> – Eigenschaften und Limits für Gleitpunkttypen
  B.1.5 <limits.h> – Limits, Konstanten
  B.1.6 <locale.h> – Länderspezifische Eigenheiten
  B.1.7 <math.h> – Mathematische Funktionen
  B.1.8 <setjmp.h> – Nicht-lokale Sprünge
  B.1.9 <signal.h> – Signale
  B.1.10 <stdarg.h> – Variabel lange Argumentenliste
  B.1.11 <stddef.h> – Standarddefinitionen
  B.1.12 <stdio.h> – Standard Ein-/Ausgabe-Funktionen
  B.1.13 <stdlib.h> – Nützliche Funktionen (gemischt)
  B.1.14 <string.h> – String-Bearbeitungsfunktionen
  B.1.15 <time.h> – Datum und Uhrzeit
B.2 ANSI C99
  B.2.1 <iso646.h> – Zur Verwendung von Zeichensätze im ISO646-Format (NA1)
  B.2.2 <wchar.h> – (NA1)
  B.2.3 <wctype.h> (NA1)
  B.2.4 <complex.h> – Funktionen zur Manipulation komplexer Zahlen
  B.2.5 <fenv.h> – Kontrolle der Gleitpunkzahlen-Umgebung
  B.2.6 <inttypes.h> – Für genauere Integertypen
  B.2.7 <stdbool.h> – Boolesche Datentypen in C
  B.2.8 <stdint.h> – Definiert verschieden Integertypen
  B.2.9 <math.h> – Neue Funktionen
  B.2.10 <tgmath.h> – Typengenerische Mathematik-Funktionen
A.3 Elementare E/A-Funktionen
  B.3.1 Limits-Konstanten
  B.3.2 Elementare E/A-Funktionen
B.4 Fortgeschrittene Ein-/Ausgabe-Funktionen
  B.4.1 Multiplexing Ein-/Ausgabe – select()
  B.4.2 Memory Mapped Ein-/Ausgabe
B.5 Verzeichnisse
B.6 Attribute von Dateien und Verzeichnissen
  B.6.1 Funktionen zum Erfragen der Dateiattribute
  B.6.2 Funktionen zum Erfragen oder Setzen bestimmter Zugriffsrechte
B.7 Links
B.8 Prozess und Prozessverwaltungsfunktionen
  B.8.1 Umgebungsvariablen (Environment) eines Prozesses
  B.8.2 Ressourcen-Limits eines Prozesses abfragen oder setzen
  B.8.3 Prozesserkennung erfragen bzw. setzen
  B.8.4 Prozesssteuerung
B.9 Signale – Das neue Signalkonzept
  B.9.1 Signalmengen
  B.9.2 (POSIX) Signalhandler-Funktionen
  B.9.3 Übersicht zu den Signalen
  B.9.4 Signale senden und Prozesse suspendieren
B.10 Interprozesskommunikationen
  B.10.1 Pipes
  B.10.2 FIFO (Benannte Pipe) erzeugen
B.11 Sys-V-Interprozesskommnunikationen
  B.11.1 Message Queue
  B.11.2 Semaphor
  B.11.3 Shared Memory
B.12 Threadprogrammierung
  B.12.1 Thread-Verwaltung
  B.12.2 Attribute von Threads und das Scheduling erfragen
  B.12.3 Attribute und das Scheduling von Threads setzen
  B.12.4 Mutex-Variablen
  B.12.5 Attribute von Mutexe
  B.12.6 Condition Variablen
  B.12.7 Threads beenden
B.13 Netzwerkprogrammierung
  B.13.1 Grundlegende Socket-Funktionen
  B.13.2 Konvertieren zur richtigen Byteanordnung
  B.13.3 Abfragen von Netzwerknummern und Internetadressen
  B.13.4 Hostnamen aus der Host-Datenbank ermitteln
  B.13.5 Service-Datenbank
B.14 MySQL C-API
  B.14.1 Übersetzen einer Anwendung
  B.14.2 Die MySQL C-API
  B.14.3 Datentypenübersicht der C-API
B.15 PostgreSQL C-API
  B.15.1 Übersetzen einer Anwendung
  B.15.2 Eine Verbindung zum PostgreSQL-Server herstellen
  B.15.3 Status und Informationen zur Verbindung ermitteln
  B.15.4 Verbindung beenden oder wieder aufnehmen
  B.15.5 SQL-Anfragen an den Server machen und den Status auswerten
  B.15.6 Ergebnis einer SQL-Anfrage auswerten
  B.15.7 Rückgabe des Anfrageergebnisses auslesen
  B.15.8 Ergebnisse anderer Befehle ermitteln
B.16 Weitere Funktionsreferenzen auf der Buch-CD
Rheinwerk Computing

C Inhalt der Buch-CD

Rheinwerk Computing

Index

 
  
  Zum Katalog
Zum Katalog: Linux-UNIX-Programmierung
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfόgbarkeit






 Linux-
 Hochverfόgbarkeit


Zum Katalog: Shell-Programmierung






 Shell-
 Programmierung


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de