Linux-Unix-Programmierung - Das umfassende Handbuch

Linux-Unix-Programmierung - Das umfassende Handbuch

von: Jürgen Wolf

Galileo Press, 2005

ISBN: 9783898425704

Sprache: Deutsch

1141 Seiten, Download: 6815 KB

 
Format:  PDF, auch als Online-Lesen

geeignet für: Apple iPad, Android Tablet PC's Online-Lesen PC, MAC, Laptop


 

eBook anfordern

Mehr zum Inhalt

Linux-Unix-Programmierung - Das umfassende Handbuch



  Auf einen Blick 3  
  Inhalt 5  
  Vorwort der Gutachter 23  
  Vorwort 25  
     Danksagung 25  
  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 – Ein kurze Einführung 32  
        1.5.1 GCC erhöre uns – der Aufruf 33  
        1.5.2 Was befiehlst du – Meister 33  
        1.5.3 Klassifikation der Dateitypen 37  
     1.6 POSIX, X/OPEN und ANSI C 37  
     1.7 Übersicht zum Buch 38  
     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.2.1 Verwaltung für offene Deskriptoren 45  
     2.3 Funktionen, die den Filedeskriptor verwenden 46  
        2.3.1 Datei öffnen – open() 46  
        2.3.2 Anlegen einer neuen Datei – creat() 51  
        2.3.3 Datei schließen – close() 52  
        2.3.4 Schreiben von Dateien – write() 52  
        2.3.5 Lesen von Dateien – read() 55  
        2.3.6 Schreib-/Lesezeiger positionieren – lseek() 57  
        2.3.7 Duplizieren von Filedeskriptoren – dup() und dup2() 60  
        2.3.8 Ändern oder Abfragen der Eigenschaften eines Filedeskriptors – fcntl() 62  
        2.3.9 Record Locking – Sperren von Dateien einrichten 67  
        2.3.10 Multiplexing E/A – select() 76  
        2.3.11 Unterschiedliche Operationen – ioctl() 79  
        2.3.12 Lesen und Schreiben mehrerer Puffer – writev() und readv() 80  
        2.3.13 Übersicht zu weiteren Funktionen, die den Filedeskriptor verwenden 82  
     2.4 Standard-E/A-Funktionen 85  
        2.4.1 Der FILE-Zeiger 85  
        2.4.2 Öffnen und Schließen von Dateien 86  
        2.4.3 Formatierte Ausgabe 88  
        2.4.4 Formatierte Eingabe 89  
        2.4.5 Binäres Lesen und Schreiben 90  
        2.4.6 Zeichen- und zeilenweise Ein-/Ausgabe 90  
        2.4.7 Status der Ein-/Ausgabe überprüfen 91  
        2.4.8 Stream postionieren 92  
        2.4.9 Puffer kontrollieren 93  
        2.4.10 Datei löschen und umbenennen 95  
        2.4.11 Temporäre Dateien erstellen 95  
     2.5 Mit Verzeichnissen arbeiten 96  
        2.5.1 Ein neues Verzeichnis anlegen – mkdir() 96  
        2.5.2 In ein Verzeichnis wechseln – chdir(), fchdir() 98  
        2.5.3 Ein leeres Verzeichnis löschen – rmdir() 99  
        2.5.4 Format eines Datei-Eintrags in struct dirent 100  
        2.5.5 Einen Verzeichnis-Stream öffnen – opendir() 101  
        2.5.6 Lesen aus dem DIR-Stream – opendir(), und Schließen des DIR- Streams – closedir() 103  
        2.5.7 Positionieren des DIR-Streams 106  
        2.5.8 Komplettes Verzeichnis einlesen – scandir() 106  
        2.5.9 Ganze Verzeichnisbäume durchlaufen – ftw() 111  
     2.6 Fehlerbehandlung 114  
     2.7 Ausblick 117  
  3 Attribute von Dateien und Verzeichnissen 119  
     3.1 Struktur stat 119  
        3.1.1 Dateiart und Zugriffsrechte einer Datei erfragen – st_mode 120  
        3.1.2 User-ID-Bit und Group-ID-Bit – st_uid und st_gid 123  
        3.1.3 Inode ermitteln – st_ino 124  
        3.1.4 Linkzähler – st_nlink 124  
        3.1.5 Größe der Datei – st_size 128  
        3.1.6 st_atime, st_mtime, st_ctime 130  
  4 Zugriff auf Systeminformationen 133  
     4.1 Informationen aus dem /proc- Verzeichnis herausziehen 134  
     4.2 Hardware-/Systeminformationen ermitteln 135  
        4.2.1 CPU-Informationen – /proc/cpuinfo 136  
        4.2.2 Geräteinformationen – /proc/devices 137  
        4.2.3 PCI-Bus – /proc/pci (nicht 2.6) 137  
        4.2.4 Speicherauslastung – /proc/meminfo 137  
        4.2.5 Weitere Hardwareinformationen zusammengefasst 137  
     4.3 Prozessinformationen 141  
        4.3.1 /proc/$pid/cmdline 142  
        4.3.2 /proc/$pid/environ 142  
        4.3.3 /proc/self 143  
        4.3.4 /proc/$pid/fd/ 143  
        4.3.5 /proc/$pid/statm 144  
     4.4 Kernelinformationen 145  
        4.4.1 /proc/locks 150  
        4.4.2 /proc/modules 151  
     4.5 Filesysteme 152  
        4.5.1 /proc/mounts 152  
     4.6 Weiterführendes 152  
  5 Devices – Eine einfache Verbindung zur Hardware 155  
     5.1 Die Gerätedatei- Typen 155  
     5.2 Die Gerätedatei-Nummern 156  
     5.3 Zugriff auf die Gerätedateien 157  
     5.4 Gerätenamen 157  
     5.5 Spezielle Gerätedateien 159  
     5.6 Gerätedateien in der Praxis einsetzen 160  
        5.6.1 CD auswerfen und wieder schließen 162  
        5.6.2 CD-ROM-Fähigkeiten 163  
        5.6.3 Audio CD abspielen – komplett und einzelne Tracks – Pause, Fortfahren und Stopp 164  
        5.6.4 Aktuellen Status der Audio CD ermitteln 168  
        5.6.5 Das komplette Listing 170  
  6 Dämonen, Zombies und Prozesse 177  
     6.1 Was ist ein Prozess? 177  
     6.2 Prozesskomponente 177  
        6.2.1 Prozessnumer (PID) 178  
        6.2.2 Prozessnummer des Vaterprozesses (PPID) 179  
        6.2.3 Benutzer- und Gruppennummer eines Prozesses (UID, EUID, GID, EGID) 179  
        6.2.4 Prozessstatus 180  
        6.2.5 Prozesspriorität 181  
        6.2.6 Time-Sharing-Prozesse 181  
        6.2.7 Prozessauslagerung 185  
        6.2.8 Steuerterminal 186  
     6.3 Prozesse überwachen – ps, top, kpm 186  
     6.4 Lebenszyklus eines Prozesses 188  
     6.5 Umgebungsvariablen eines Prozesses 190  
        6.5.1 Einzelne Umgebungsvariablen abfragen 192  
        6.5.2 Umgebungsvariable verändern oder hinzufügen – putenv() und setenv() 193  
        6.5.3 Löschen von Umgebungsvariablen – unsetenv() und clearenv() 196  
     6.6 Ressourcenlimits eines Prozesses 197  
        6.6.1 Mehr Sicherheit mit Ressourcen-Limits 200  
     6.7 Prozesserkennung 200  
     6.8 Erzeugung von Prozessen – fork() 202  
        6.8.1 Pufferung 205  
        6.8.2 Was wird vererbt und was nicht? 209  
        6.8.3 Einen Prozess mit veränderter Priorität erzeugen 209  
     6.9 Warten auf einen Prozess 211  
     6.10 Die exec-Familie 218  
        6.10.1 execl() 219  
        6.10.2 execve() 220  
        6.10.3 execv() 220  
        6.10.4 execle() 220  
        6.10.5 execlp() 221  
        6.10.6 execvp() 221  
        6.10.7 Kindprozesse mit exec-Aufruf überlagern 221  
     6.11 Kommandoaufrufe aus dem Programm – system() 223  
     6.12 Dämonprozesse 224  
        6.12.1 Wie ein Prozess zum Dämon wird ... 224  
        6.12.2 Dämon, sprich mit uns ... 225  
        6.12.3 Protokolieren von Dämonen – syslog() 225  
        6.12.4 syslog() in der Praxis 228  
        6.12.5 Den Dämon, den ich rief ... 230  
     6.13 Zusammenfassung und Ausblick 234  
  7 Signale 235  
     7.1 Grundlage zu den Signalen 235  
        7.1.1 Signalmaske 237  
        7.1.2 Signale und fork() 237  
        7.1.3 Signale und exec 238  
        7.1.4 Übersicht zu den Signalen 238  
     7.2 Das neue Signalkonzept 240  
        7.2.1 Wozu ein »neues« Signalkonzept? 240  
     7.3 Signalmenge initialisieren 241  
     7.4 Signalmenge hinzufügen oder löschen 241  
     7.5 Signale einrichten oder erfragen 241  
        7.5.1 Einen Signalhandler einrichten, der zurückkehrt 246  
     7.6 Signal an den eigenen Prozess senden – raise() 248  
     7.7 Signale an andere Prozesse senden – kill() 248  
     7.8 Zeitschaltuhr einrichten – alarm() 249  
     7.9 Prozesse stoppen, bis ein Signal eintritt – pause() 249  
     7.10 Prozesse für eine bestimmte Zeit stoppen – sleep() und usleep() 249  
     7.11 Signalmaske erfragen oder ändern – sigprocmask() 250  
     7.12 Prozess während einer Änderung der Signalmaske stoppen – sigsuspend() 251  
     7.13 Prozesse synchronisieren 251  
  8 IPC (Interprozesskommunikation) 255  
     8.1 Unterschiedliche Interprozesskommunikations- Techniken im Überblick 255  
        8.1.1 (Namenlose) Pipes 256  
        8.1.2 Benannte Pipes (FIFO-Pipes) 256  
        8.1.3 Message Queue (Nachrichtenspeicher) 258  
        8.1.4 Semaphore 259  
        8.1.5 Shared Memory (Gemeinsamer Speicher) 259  
        8.1.6 STREAMS 259  
        8.1.7 Sockets 260  
        8.1.8 Lock Files (Sperrdateien) 261  
        8.1.9 Dateisperren (Record Locking) 261  
     8.2 Gründe für IPC 262  
     8.3 Pipes 262  
        8.3.1 Eigenschaften von Pipes 263  
        8.3.2 Pipes einrichten – pipe() 263  
        8.3.3 Eigenschaften von elementaren E/A-Funktionen bei Pipes 267  
        8.3.4 Standard-E/A-Funktionen mit pipe 267  
        8.3.5 Pipes in einen anderen Prozess umleiten 269  
        8.3.6 Filterprogramm erstellen mithilfe einer Pipe 271  
        8.3.7 Einrichten einer Pipe zu einem anderen Prozess – popen() 275  
        8.3.8 Mail versenden mit Pipes und Sendmail 276  
        8.3.9 Drucken über eine Pipe mit lpr 279  
        8.3.10 Benannte Pipes – FIFOs 283  
     8.4 System V-Interprozesskommunikation 299  
        8.4.1 Gemeinsamkeiten der SysV-Mechanismen 299  
        8.4.2 Ein Objekt einrichten, eine Verbindung herstellen und das Objekt wieder löschen 301  
        8.4.3 Datenaustausch zwischen nicht verwandten Prozessen 301  
     8.5 Semaphore 301  
        8.5.1 Lebenszyklus einer Semaphore 302  
        8.5.2 Ein Semaphor öffnen oder erstellen – semget() 305  
        8.5.3 Abfragen, ändern oder löschen der Semaphoremenge – semctl() 306  
        8.5.4 Operationen auf Semaphoremengen – semop() 308  
        8.5.5 Semphore im Vergleich mit Sperren 309  
     8.6 Message Queues 309  
        8.6.1 Eine Message Queue öffnen oder erzeugen – msgget() 310  
        8.6.2 Nachrichten versenden – msgsnd() 311  
        8.6.3 Eine Nachricht empfangen – msgrcv() 311  
        8.6.4 Abfragen, ändern oder löschen einer Message Queue – msgctl() 312  
     8.7 Shared Memory 321  
        8.7.1 Ein Shared Memory-Segment erstellen oder öffnen – shmget() 321  
        8.7.2 Ein Shared Memory-Segment abfragen, ändern oder löschen – shmctl() 322  
        8.7.3 Ein Shared Memory-Segment anbinden (attach) – shmat() 323  
        8.7.4 Ein Shared Memory-Segment loslösen – shmdt() 323  
        8.7.5 Client/Server-Beispiel – Shared Memory 324  
  9 Threads 331  
     9.1 Wozu Thread-Programmierung? 331  
     9.2 Unterschiede zwischen Threads und Prozessen? 331  
     9.3 Thread-sicher (thread-safe) 332  
     9.4 Thread-Bibliotheken 332  
     9.5 Kernel- Threads und User- Threads 333  
     9.6 Scheduling 334  
     9.7 Die grundlegenden Funktionen zur Thread- Programmierung 334  
     9.8 Jeder Thread ein eigener Prozess? 337  
     9.9 Die Attribute von Threads und das Scheduling 338  
        9.9.1 Erfragen und setzen von Attributen 339  
     9.10 Zwei Threads vergleichen 341  
     9.11 Mutexe 342  
     9.12 Mutex anlegen 343  
     9.13 Mutex sperren und wieder freigeben 343  
     9.14 Mutex löschen 344  
     9.15 Attribute von Mutexen 348  
     9.16 Race conditions mit Condition Variables vermeiden 349  
     9.17 Fehlerbehandlung von Threads 358  
     9.18 Threads und Signale 360  
     9.19 Zusammenfassung 363  
  10 Netzwerkprogrammierung 365  
     10.1 Einführung 365  
     10.2 Aufbau von Netzwerken 365  
        10.2.1 ISO/OSI und TCP/IP – Referenzmodell 366  
        10.2.2 Das World Wide Web (Internet) 369  
     10.3 TCP/IP – Aufbau und Struktur 370  
        10.3.1 Netzwerkschicht (Datenübertragung) 370  
        10.3.2 Internetschicht 370  
        10.3.3 Transportschicht ( TCP, UDP) 371  
        10.3.4 Anwendungsschicht 371  
     10.4 TCP Socket 373  
     10.5 Kommunikationsmodell 374  
     10.6 Grundlegende Funktionen zum Zugriff auf die Socketschnittstelle 374  
        10.6.1 Ein Socket anlegen – socket() 374  
        10.6.2 Verbindungsaufbau – connect() 376  
        10.6.3 Socket mit einer Adresse verknüpfen – bind() 377  
        10.6.4 Auf Verbindungen warten – listen() und accept() 377  
        10.6.5 Senden und empfangen von Daten (1) – write() und read() 378  
        10.6.6 Senden und empfangen von Daten (2) – send() und recv() 379  
        10.6.7 Verbindung schließen – close() 380  
     10.7 Aufbau eines Clientprogramms 380  
        10.7.1 Zusammenfassung Clientanwendung und Quellcode 383  
     10.8 Aufbau des Serverprogramms 384  
        10.8.1 Zusammenfassung: Serveranwendung und Quellcode 385  
     10.9 Weitere Funktionen zur Netzwerkprogrammierung 389  
        10.9.1 inet_aton(), inet_pton() und inet_addr() 389  
        10.9.2 inet_ntoa() und inet_ntop() 390  
        10.9.3 inet_network() 391  
        10.9.4 inet_netof() 392  
        10.9.5 inet_lnaof() 392  
        10.9.6 inet_makeaddr() 392  
        10.9.7 gethostbyname() 395  
        10.9.8 gethostbyaddr() 396  
        10.9.9 herror() 397  
        10.9.10 Informationen zur Portnummern 398  
     10.10 Der Puffer 402  
     10.11 Parallele Server 403  
     10.12 Syncrones Multiplexing – select() 416  
     10.13 POSIX- Threads und Netzwerkprogrammierung 428  
     10.14 Optionen für Sockets setzen bzw. erfragen 433  
        10.14.1 setsockopt() 433  
        10.14.2 getsockopt() 433  
        10.14.3 Socket-Optionen 434  
     10.15 UDP 437  
        10.15.1 Clientanwendung 439  
        10.15.2 Serveranwendung 439  
        10.15.3 recvfrom() und sendto() 440  
     10.16 Multicast-Socket 444  
        10.16.1 Anwendungsgebiete von Multicast- Verbindungen 451  
     10.17 Nicht blockierende I/O-Sockets 451  
     10.18 Etwas zu Streams und TLI, Raw Socket, XTI 454  
        10.18.1 Raw Socket 454  
        10.18.2 TLI und XTI 455  
        10.18.3 RPC (Remote Procedure Call) 455  
     10.19 IPv4 und IPv6 456  
        10.19.1 IPv6 – Ein wenig genauer 456  
     10.20 Netzwerksoftware nach IPv6 portieren 457  
        10.20.1 Konstanten 457  
        10.20.2 Strukturen 458  
        10.20.3 Funktionen 458  
     10.21 Sicherheit und Verschlüsselung 459  
  11 MySQL und PostgreSQL 461  
     11.1 Relationales Datenbanksystem 461  
     11.2 Relationaler Datenbankserver 463  
     11.3 SQL-Server im Überblick 464  
     11.4 MySQL 464  
        11.4.1 Anwendungsgebiete von MySQL 465  
        11.4.2 Schnittstellen von MySQL 465  
        11.4.3 Installation von MySQL 465  
        11.4.4 MySQL-Server starten und stoppen 466  
        11.4.5 Konfigurationsdatei my.cnf 466  
        11.4.6 Kommandozeilenwerkzeuge für und von mysql 468  
        11.4.7 Grafische Clients 471  
        11.4.8 MySQL-Crashkurs 472  
        11.4.9 Datentypen 473  
        11.4.10 Datenbank anlegen, verwenden und löschen 476  
        11.4.11 Tabelle anlegen 478  
        11.4.12 Schlüsselfelder ( Tabellen anlegen) 479  
        11.4.13 Indices 479  
        11.4.14 Tabellentypen ( Tabellen anlegen) 480  
        11.4.15 Autowerte definieren 480  
        11.4.16 Tabellen umbenennen und ändern 480  
        11.4.17 Daten einfügen, ändern und löschen 483  
        11.4.18 Daten importieren 485  
        11.4.19 Datenausgabe 485  
        11.4.20 NULL ist 0 oder undefiniert? 487  
        11.4.21 Unscharfe Suche 487  
     11.5 MySQL C-API 488  
        11.5.1 Verbindung mit dem MySQL-Server aufbauen 490  
        11.5.2 Aufgetretene Fehler ermitteln – mysql_errno() und mysql_ error() 492  
        11.5.3 Schließt die Verbindung zum Server – mysql_close() 493  
        11.5.4 Erstes Beispiel 493  
        11.5.5 Verschiedene Informationen ermitteln 498  
        11.5.6 Datenbanken, Tabellen und Felder ausgeben (MYSQL_RES) 501  
        11.5.7 Ergebnismenge zeilenweise bearbeiten (MYSQL_ROW) 503  
        11.5.8 Ergebnismenge spaltenweise einlesen (und ausgeben) ( MYSQL_ FIELD) 505  
        11.5.9 Ein Beispiel 509  
        11.5.10 Ergebnismenge – weitere Funktionen 516  
        11.5.11 Befehle an den Server – mysql_query() und mysql_ real_ query() 517  
        11.5.12 Weitere Funktionen 521  
        11.5.13 Veraltete Funktionen 526  
        11.5.14 Neue Funktionen ab Version 4.1.x 527  
     11.6 Beispiel eines Newssystems mit MySQL 528  
        11.6.1 Die Headerdatei my_cgi.h 529  
        11.6.2 (Pseudo-)Planung 534  
        11.6.3 Datenbank und Tabellen anlegen 535  
        11.6.4 MySQL-Clients mit GUI 555  
        11.6.5 Randnotiz 555  
     11.7 Neue SQL-Funktionen für die Shell – MySQL erweitern 555  
     11.8 MySQL-Funktionen mit der UDF-Schnittstelle entwerfen 557  
        11.8.1 UDF-Sequenzen 558  
        11.8.2 UDF_INIT-Struktur 559  
        11.8.3 UDF_ARGS-Struktur 560  
        11.8.4 Rückgabewert 561  
        11.8.5 Benutzerdefinierte Funktionen erstellen 561  
        11.8.6 Benutzerdefinierte Funktion kompilieren, installieren und ausführen 564  
     11.9 PostgreSQL – objektrelationales Datenbankverwaltungssystem 566  
        11.9.1 PostgreSQL im Vergleich zu MySQL 566  
        11.9.2 Unterschiede in der Syntax zwischen MySQL und PostgreSQL 567  
        11.9.3 PostgreSQL installieren 568  
        11.9.4 Konfigurationsdateien bei PostgreSQL – (postgresql.conf, pg_ hba_ conf) 569  
        11.9.5 CRASHKURS PostgreSQL 571  
        11.9.6 PostgreSQL C-API – libpg 579  
        11.9.7 Umgebungsvariablen und Passwortdatei 600  
        11.9.8 PostgreSQL und Threads 601  
        11.9.9 Ausblick 601  
  12 Terminal E/A und Benutzerschnittstellen für die Konsole 603  
     12.1 termios 603  
        12.1.1 Terminalattribute bearbeiten 604  
        12.1.2 Flags setzen und löschen 609  
        12.1.3 Terminal-Idenfizierung 616  
        12.1.4 Geschwindigkeitskontrolle – Baudrate von Terminals einstellen 617  
     12.2 terminfo 622  
        12.2.1 terminfo verwenden 623  
        12.2.2 terminfo initialsieren – setupterm() 624  
        12.2.3 Eigenschaften eines Terminals (Finden von capnames) – tigetflag(), tigetnum() und tigetstr() 625  
        12.2.4 Mit terminfo-Eigenschaften arbeiten – putp(), tputs(), tparm() 628  
     12.3 ncurses – Halbgrafik 631  
        12.3.1 ncurses initialisieren 631  
        12.3.2 Tastaturmodus und Ein- und Ausgabe 632  
        12.3.3 Eigenschaft der Fenster 642  
        12.3.4 Scrolling 645  
        12.3.5 Attribute und Farben setzen 648  
        12.3.6 Fensterroutinen 653  
        12.3.7 Mausprogrammierung mit ncurses 658  
  13 Xlib – X Window-Programmierung 667  
     13.1 Architektur von X 667  
        13.1.1 Pufferung 668  
        13.1.2 Ressourcen 669  
     13.2 X Toolkit 669  
     13.3 Der Windowmanager 670  
     13.4 Fenster mit X 670  
        13.4.1 Verbindung herstellen 671  
        13.4.2 Fenster definieren 672  
        13.4.3 Informationen für den Windowmanager 673  
        13.4.4 Fenster anzeigen 674  
        13.4.5 Fenster und X- Verbindung beenden 674  
        13.4.6 Das Grundgerüst als Quellcode 674  
     13.5 Events 679  
        13.5.1 Event-Maske setzen 679  
        13.5.2 Event-Bearbeitungsschleife 680  
        13.5.3 Abarbeitung der Events 681  
        13.5.4 Tastatur-Event 681  
        13.5.5 Mausbutton-Event 682  
        13.5.6 Expose-Event 683  
        13.5.7 EnterWindowMask – LeaveWindowMask 683  
        13.5.8 Listing zu den Events 683  
     13.6 Grafik mit X 688  
        13.6.1 Grafikprimitive – Zeichenfunktionen 689  
     13.7 Text mit X 694  
        13.7.1 Fonts benutzen 694  
        13.7.2 Übersicht zu den Fonts 695  
        13.7.3 Höhe und Breite ermitteln 696  
        13.7.4 Listing mit Textausgabe 697  
     13.8 Farben mit X 704  
     13.9 Beispiel – Ein Button mit X 714  
     13.10 Wozu kann ich denn nun die Xlib in der Praxis verwenden? 719  
     13.11 X und X- Toolkits – Einführung 719  
     13.12 Toolkit-Programmierung 719  
        13.12.1 Widgets 720  
     13.13 Ein einfaches Fenster mit einem Button 720  
        13.13.1 Ressourcen 722  
     13.14 Zwei Buttons in Box- und Form- Widget mit Textausgabe ( Label- Widget) 727  
     13.15 editres – Widget-Hierarchie 730  
     13.16 Texteingabe mit Dialog- Widget 731  
     13.17 X- Toolkits meets Xlib 735  
     13.18 Zusammenfassung 738  
  14 GTK+ 741  
     14.1 Was ist GTK+? 741  
        14.1.1 Was ist GDK und Glib? 741  
        14.1.2 Schnittstellen von GTK+ zu anderen Programmiersprachen 743  
        14.1.3 GTK+ und GNOME 743  
        14.1.4 GTK+ Version 1.2 und 2.x 743  
        14.1.5 GTK+ – Aufbau des Kapitels 744  
     14.2 GTK+-Anwendungen übersetzten 745  
     14.3 Eine Einführung in die Glib-Bibliothek 746  
        14.3.1 Datentypen 746  
        14.3.2 Routinen 747  
        14.3.3 Assertions-Funktionen 749  
        14.3.4 Speicherverwaltung 751  
        14.3.5 Stringbearbeitung 754  
        14.3.6 Selbstverwaltender Stringpuffer 758  
        14.3.7 Timer 761  
        14.3.8 Dynamische Arrays 763  
        14.3.9 Listen, Hashtabellen und binäre Bäume 766  
        14.3.10 Ausblick Glib 767  
     14.4 Grundlagen der GTK+-Programmierung 768  
        14.4.1 Die Umgebung initialisieren 768  
        14.4.2 Widgets erzeugen und ggf. die Attribute setzen 768  
        14.4.3 Eine Callback-Funktion einrichten, um Events abzufangen 770  
        14.4.4 Eine GTK+-Anwendung beenden 772  
        14.4.5 Die hierarchische Anordnung der Widgets definieren 774  
        14.4.6 Widgets anzeigen 775  
        14.4.7 Signale und Events abfangen und bearbeiten – (Events) Verarbeitungsschleife 775  
        14.4.8 GTK+ und Umlaute (Zeichenkodierung) 776  
     14.5 Fenster – GtkWindow 777  
        14.5.1 Dialogfenster (Dialogboxen) 781  
        14.5.2 GtkMessageDialog 785  
     14.6 Anzeige-Elemente 785  
        14.6.1 Text – GtkLabel 788  
        14.6.2 Trennlinie – GtkSeparator 791  
        14.6.3 Grafiken – GtkImage 791  
        14.6.4 Statusleiste – GtkStatusbar 792  
        14.6.5 Fortschrittsbalken – GtkProgressBar 793  
     14.7 Behälter 793  
        14.7.1 Boxen – GtkBox 793  
        14.7.2 Aufteilungen, Register und Button-Box 795  
        14.7.3 Tabellen – GtkTable 801  
        14.7.4 Ausrichtung – GtkAlignment 805  
     14.8 Buttons und Toogled-Buttons 806  
        14.8.1 Buttons allgemein 812  
        14.8.2 Radio-Buttons (GtkRadioButton) 813  
        14.8.3 GtkRadioButton, GtkCheckButton und GtkToggleButton 813  
        14.8.4 Signale für Buttons (GtkButton) 814  
     14.9 Dateneingabe 814  
        14.9.1 Textfelder – GtkEntry 821  
        14.9.2 Schieberegler – GtkScale 822  
        14.9.3 Zahlenfelder – GtkSpinButton 823  
        14.9.4 Einstellungen – GtkAdjustment 824  
        14.9.5 GtkEditable 825  
     14.10 Menü und Toolbar 825  
        14.10.1 Menü – GtkItemFactory 830  
        14.10.2 Toolbar – GtkToolbar 835  
        14.10.3 Options-Menü – GtkOptionsMenu 838  
        14.10.4 Combo-Boxen – GtkCombo 839  
     14.11 Mehrzeiliger Text 843  
        14.11.1 Text(editor) – GtkTextView, GtkTextBuffer 851  
        14.11.2 Scrollendes Fenster – GtkScrolledWindow 854  
     14.12 Auswählen (Selection) 855  
        14.12.1 Dateiauswahl – GtkFileSelection 863  
     14.13 Events 864  
     14.14 Weitere Widget- und GTK+-Elemente im Überblick 870  
        14.14.1 Bäume und Listen 870  
        14.14.2 Lineale 870  
        14.14.3 Zwischenablage (Clipboard) 870  
        14.14.4 Drag-and-Drop 871  
        14.14.5 Stock Items – Repertoire-Einträge 871  
        14.14.6 Signale 871  
        14.14.7 Ressource-Files 871  
        14.14.8 Widget-Entwicklung 871  
        14.14.9 GDK 871  
  15 SDL 873  
     15.1 Was ist und kann SDL? 873  
     15.2 SDL installieren 874  
     15.3 SDL-Anwendungen erstellen 874  
     15.4 SDL initialisieren und Videomodus einstellen 875  
        15.4.1 Programmbeispiel – SDL initialisieren und Videomodus einstellen 877  
     15.5 Direkt auf den Bildschirm zeichnen 878  
        15.5.1 Programmbeispiel – Direkt auf den Bildschirm zeichnen 880  
     15.6 Bitmap laden und anzeigen 883  
        15.6.1 Programmbeispiel – Bitmap laden und anzeigen 884  
     15.7 Ein anderes Grafikformat laden und anzeigen 886  
     15.8 Der rechteckige Bildbereich von SDL 887  
     15.9 Farbenschlüssel, Transparenz und Alpha-Blending 890  
        15.9.1 Alpha-Blending 891  
     15.10 Animation 892  
        15.10.1 Programmbeispiel – Animation 894  
     15.11 Eingabe- und Ereignissverarbeitung 899  
        15.11.1 SDL-Event-Struktur 900  
        15.11.2 Maus-Events 902  
        15.11.3 Programmbeispiel – Maus-Event 904  
        15.11.4 Tastatur-Events 909  
        15.11.5 Programmbeispiel – Tastatur-Events 912  
        15.11.6 Joystick-Events 915  
        15.11.7 Programmbeispiel – Joystick-Events 918  
        15.11.8Weitere Events 920  
     15.12 Audio 921  
        15.12.1 Programmbeispiel – Audio 923  
     15.13 Ausblick 926  
  16 Werkzeuge für Programmierer 929  
     16.1 Der Compiler: gcc 929  
        16.1.1 Standardgebrauch des gcc 931  
        16.1.2 Linken von Programmbibliotheken 931  
        16.1.3 Dateien, die GCC kennt 932  
        16.1.4 Ausgabe-Dateien bei jedem einzelnen Schritt der Übersetzung erstellen 933  
        16.1.5 Noch mehr Optionen 934  
        16.1.6 Optionen für Warnmeldungen 934  
        16.1.7 Präprozessor-Optionen 935  
        16.1.8 Debuggen und Profiling 935  
        16.1.9 Optimierungsflags 935  
     16.2 Make 936  
        16.2.1 Erzeugen eines Makefiles 938  
        16.2.2 Variablen, Makros und Abkürzungen 944  
        16.2.3 Implizite Regeln 947  
        16.2.4 Musterregeln 948  
        16.2.5 make zur Installation verwenden 949  
        16.2.6 make-Optionen 950  
        16.2.7 Ausblick 950  
     16.3 Bibliotheken erstellen 951  
        16.3.1 Statische Bibliotheken erstellen 951  
        16.3.2 Dynamische Bibliotheken (shared libraries) erstellen 954  
        16.3.3 Dynamisches Nachladen von Bibliotheken 957  
     16.4 RPM 959  
        16.4.1 Einführung in RPM 960  
        16.4.2 Installieren – rpm -i 960  
        16.4.3 Deinstallieren – rpm -e 960  
        16.4.4 Aktualisieren – rpm -U 961  
        16.4.5 Weiteres 961  
        16.4.6 Benötigte Komponenten für ein einfaches RPM 961  
        16.4.7 Verzeichnisse die RPM benötigt 962  
        16.4.8 Ein eigenes RPM-Paket erstellen 962  
        16.4.9 Sources 962  
        16.4.10 Die Spec-Datei 963  
        16.4.11 Paket erstellen 966  
        16.4.12 Das Paket installieren 968  
     16.5 RCS und CVS 970  
        16.5.1 Software Configuration Management Systeme (SCM) 970  
        16.5.2 RCS 971  
        16.5.3 CVS 980  
     16.6 Zeitmessung von Programmen 996  
        16.6.1 Einfache Zeitmessung mit TIME – Laufzeit von Prozessen 996  
        16.6.2 Profiling mit GPROF – Laufzeit von Funktionen 997  
        16.6.3 Analyse mit GCOV 1001  
     16.7 Debuggen mit gdb und ddd 1003  
     16.8 STRACE – Systemaufrufe verfolgen 1014  
     16.9 Memory Leaks und unerlaubte Speicherzugriffe 1016  
        16.9.1 efence 1016  
        16.9.2 valgrind 1019  
     16.10 Ausblick 1023  
  A Sicherheit unter Linux 1025  
     A. 1 Viren und Trojaner 1025  
     A.2 Der Superuser (su) 1026  
     A.3 Überlaufen von Logfiles 1026  
     A.4 Zugriffsrechte auf Dateien 1027  
     A.5 Das SUID-Bit 1027  
     A.6 Programme ohne Ausführrechte 1029  
     A.7 Buffer Overflow (Pufferüberlauf) 1029  
     A.8 Race Condition 1032  
     A.9 Temporäre Dateien 1033  
     A. 10 chroot 1033  
     A. 11 Umgebungsvariablen 1034  
     A. 12 Zugriffsrechte – häufig gemachte Fehler 1035  
     A. 13 system() und popen() 1035  
  B Funktionsreferenz 1037  
     B. 1 ANSI C 1037  
        B. 1.1 – Testmöglichkeiten in einem Programm 1038  
        B. 1.2 – Zeichenklassifizierung/Umwandlung 1038  
        B. 1.3 – Fehler-Konstanten 1039  
        B. 1.4 – Eigenschaften und Limits für Gleitpunkttypen 1040  
        B. 1.5 – Limits, Konstanten 1041  
        B. 1.6 – Länderspezifische Eigenheiten 1042  
        B. 1.7 – Mathematische Funktionen 1045  
        B. 1.8 – Nicht-lokale Sprünge 1046  
        B. 1.9 – Signale 1047  
        B. 1.10 – Variabel lange Argumentenliste 1047  
        B. 1.11 – Standarddefinitionen 1049  
        B. 1.12 – Standard Ein-/Ausgabe-Funktionen 1050  
        B. 1.13 – Nützliche Funktionen (gemischt) 1052  
        B. 1.14 – String-Bearbeitungsfunktionen 1054  
        B. 1.15 – Datum und Uhrzeit 1056  
     B.2 ANSI C99 1057  
        B.2.1 – Zur Verwendung von Zeichensätze im ISO646- Format ( NA1) 1058  
        B.2.2 – (NA1) 1058  
        B.2.3 (NA1) 1059  
        B.2.4 – Funktionen zur Manipulation komplexer Zahlen 1059  
        B.2.5 – Kontrolle der Gleitpunkzahlen-Umgebung 1059  
        B.2.6 – Für genauere Integertypen 1062  
        B.2.7 – Boolesche Datentypen in C 1062  
        B.2.8 – Definiert verschieden Integertypen 1062  
        B.2.9 – Neue Funktionen 1063  
        B.2.10 – Typengenerische Mathematik-Funktionen 1065  
     B.3 Elementare E/A-Funktionen 1065  
        B.3.1 Limits-Konstanten 1066  
        B.3.2 Elementare E/A-Funktionen 1067  
     B.4 Fortgeschrittene Ein-/Ausgabe-Funktionen 1068  
        B.4.1 Multiplexing Ein-/Ausgabe – select() 1068  
        B.4.2 Memory Mapped Ein-/Ausgabe 1069  
     B.5 Verzeichnisse 1074  
     B.6 Attribute von Dateien und Verzeichnissen 1076  
        B.6.1 Funktionen zum Erfragen der Dateiattribute 1077  
        B.6.2 Funktionen zum Erfragen oder Setzen bestimmter Zugriffsrechte 1079  
     B.7 Links 1080  
     B.8 Prozess und Prozessverwaltungsfunktionen 1080  
        B.8.1 Umgebungsvariablen (Environment) eines Prozesses 1080  
        B.8.2 Ressourcen-Limits eines Prozesses abfragen oder setzen 1080  
        B.8.3 Prozesserkennung erfragen bzw. setzen 1081  
        B.8.4 Prozesssteuerung 1082  
     B.9 Signale – Das neue Signalkonzept 1082  
        B.9.1 Signalmengen 1082  
        B.9.2 (POSIX) Signalhandler-Funktionen 1083  
        B.9.3 Übersicht zu den Signalen 1083  
        B.9.4 Signale senden und Prozesse suspendieren 1086  
     B. 10 Interprozesskommunikationen 1086  
        B. 10.1 Pipes 1086  
        B. 10.2 FIFO (Benannte Pipe) erzeugen 1087  
     B. 11 Sys- V-Interprozesskommnunikationen 1087  
        B. 11.1 Message Queue 1087  
        B. 11.2 Semaphor 1088  
        B. 11.3 Shared Memory 1088  
     B. 12 Threadprogrammierung 1089  
        B. 12.1 Thread- Verwaltung 1090  
        B. 12.2 Attribute von Threads und das Scheduling erfragen 1090  
        B. 12.3 Attribute und das Scheduling von Threads setzen 1091  
        B. 12.4 Mutex - Variablen 1091  
        B. 12.5 Attribute von Mutexe 1092  
        B. 12.6 Condition Variablen 1093  
        B. 12.7 Threads beenden 1093  
     B. 13 Netzwerkprogrammierung 1094  
        B. 13.1 Grundlegende Socket-Funktionen 1094  
        B. 13.2 Konvertieren zur richtigen Byteanordnung 1096  
        B. 13.3 Abfragen von Netzwerknummern und Internetadressen 1097  
        B. 13.4 Hostnamen aus der Host-Datenbank ermitteln 1098  
        B. 13.5 Service-Datenbank 1099  
     B. 14 MySQL C-API 1100  
        B. 14.1 Übersetzen einer Anwendung 1100  
        B. 14.2 Die MySQL C-API 1100  
        B. 14.3 Datentypenübersicht der C-API 1104  
     B. 15 PostgreSQL C-API 1105  
        B. 15.1 Übersetzen einer Anwendung 1105  
        B. 15.2 Eine Verbindung zum PostgreSQL-Server herstellen 1105  
        B. 15.3 Status und Informationen zur Verbindung ermitteln 1106  
        B. 15.4 Verbindung beenden oder wieder aufnehmen 1107  
        B. 15.5 SQL-Anfragen an den Server machen und den Status auswerten 1107  
        B. 15.6 Ergebnis einer SQL-Anfrage auswerten 1107  
        B. 15.7 Rückgabe des Anfrageergebnisses auslesen 1108  
        B. 15.8 Ergebnisse anderer Befehle ermitteln 1109  
     B. 16 Weitere Funktionsreferenzen auf der Buch-CD 1109  
  C Inhalt der Buch-CD (nicht zum eBook erhältlich) 1111  
  Index 1113  

Kategorien

Service

Info/Kontakt