|
 |
|
Galileo Computing. Wissen, wie’s geht.
|
 |
C von A bis Z 978-3-89842-392-2 |
| Inhaltsverzeichnis |
1 ... Einstieg in C ... 21
1.1 ... Historische Entwicklung ...
23
1.2 ... Der ANSI C-Standard ... 23
1.3 ... Der Vorteil des ANSI C-
Standards ... 23
1.4 ... Vor- und Nachteile der
Programmiersprache C ... 24
1.5 ... C in diesem Buch ... 24
2 ... Was benötige ich, um C zu
lernen? 25
2.1 ... Texteditor ... 27
2.2 ... Compiler ... 27
2.3 ... All-in-one – die
Entwicklungsumgebung ... 27
2.4 ... Welcher Compiler und welches
Betriebssystem ... 28
3 ... Das erste Programm ... 29
3.1 ... Der beste Lernerfolg ...
31
3.2 ... »Hallo Welt« in C ... 31
3.3 ... Analyse des Programms ...
33
4 ... Zeichensätze ... 35
4.1 ... Basic-Zeichensatz ... 37
4.2 ... Ausführungszeichensatz
(Steuerzeichen) 37
5 ... Kommentare in C ... 41
5.1 ... Wann sind Kommentare sinnvoll?
43
5.2 ... Die Kommentar-Schreibweisen //
oder /* */ 44
6 ... Formatierte Eingabe mit scanf
() 45
6.1 ... Der Adressoperator »&« 48
6.2 ... Probleme und deren Behandlung
mit scanf() 49
6.2.1 ... Möglichkeit 1 50
6.2.2 ... Möglichkeit 2 51
6.2.3 ... Möglichkeit 3 51
6.3 ... Überprüfen auf das richtige
Format ... 52
6.4 ... Zusammenfassung scanf() 53
7 ... Formatierte Ausgabe mit
printf ... 55
8 ... Elementare Datentypen ...
59
8.1 ... Der Datentyp int (Integer)
61
8.2 ... Variablen deklarieren ...
62
8.2.1 ... Erlaubte Bezeichner ...
64
8.3 ... C versus C++ bei der
Deklaration von Variablen ... 65
8.4 ... Der Datentyp long ... 65
8.5 ... Der Datentyp short ... 66
8.6 ... Die Gleitpunkttypen float und
double ... 67
8.6.1 ... Gleitpunkttypen im Detail ...
68
8.6.2 ... float im Detail ... 69
8.6.3 ... double im Detail ... 69
8.6.4 ... long double ... 70
8.6.5 ... Einiges zu n-stelliger
Genauigkeit ... 70
8.7 ... Numerische
Gleitpunktprobleme ... 71
8.8 ... Der Datentyp char ... 72
8.9 ... Nationale contra internationale
Zeichensätze ... 77
8.10 ... Vorzeichenlos und
vorzeichenbehaftet ... 78
8.11 ... Limits für Ganzzahl- und
Gleitpunktdatentypen ... 79
8.12 ... Konstanten ... 82
8.12.1 ... Ganzzahlkonstanten ...
82
8.12.2 ... Gleitpunktkonstanten ...
82
8.12.3 ... Zeichenkonstanten ...
83
8.12.4 ... String-Literale
(Stringkonstante) 83
8.13 ... Umwandlungsvorgaben für
formatierte Ein-/Ausgabe ... 83
9 ... Operatoren ... 89
9.1 ... Exkurs zu Operatoren ...
91
9.2 ... Arithmetische Operatoren ...
92
9.2.1 ... Dividieren von Ganzzahlen ...
93
9.3 ... Erweiterte Darstellung
arithmetischer Operatoren ... 94
9.4 ... Inkrement- und Dekrement-
Operatoren ... 95
9.5 ... Bit-Operatoren ... 97
9.5.1 ... Bitweises UND ... 97
9.5.2 ... Bitweises ODER ... 99
9.5.3 ... Bitweise XOR ... 99
9.5.4 ... Bitweises Komplement ...
100
9.5.5 ... Linksverschiebung ...
101
9.5.6 ... Rechtsverschiebung ...
102
9.5.7 ... Rezept für
Fortgeschrittene ... 102
9.6 ... sizeof-Operator ... 103
9.6.1 ... C versus C++ 105
10 ... Typenumwandlung ... 107
11 ... Kontrollstrukturen ...
111
11.1 ... Verzweigungen mit der if-
Bedingung ... 113
11.1.1 ... Anweisungsblock ... 113
11.2 ... Die Verzweigung mit else
if ... 117
11.3 ... Die Verzweigung mit else ...
119
11.4 ... Der !-Operator (logischer
Operator) 122
11.5 ... Logisches UND (&&) – Logisches
ODER (||) 124
11.6 ... Bedingungsoperator ?:
126
11.7 ... Fallunterscheidung: die switch-
Verzweigung ... 128
11.7.1 ... default ... 130
11.8 ... Die while-Schleife ...
131
11.8.1 ... Endlosschleife (while)
133
11.8.2 ... Fehlervermeidung bei while
Schleifen ... 134
11.9 ... Die do while-Schleife ...
135
11.10 ... Die for-Schleife ... 139
11.10.1 ... Beispiele für eine for-
Schleife ... 141
11.11 ... Kontrollierte Sprünge ...
144
11.11.1 ... continue ... 144
11.11.2 ... break ... 145
11.12 ... Direkte Sprünge mit goto ...
146
11.13 ... Notationsstil ... 147
12 ... Funktionen ... 149
12.1 ... Was sind Funktionen?
151
12.2 ... Wozu Funktionen?
151
12.3 ... Definition von Funktionen ...
151
12.4 ... Funktionsaufruf ... 152
12.5 ... Funktionsdeklaration ...
153
12.6 ... Lokale Variablen ... 155
12.7 ... Globale Variablen ... 157
12.8 ... Statische Variablen ...
158
12.9 ... Schlüsselworte für Variablen –
Speicherklassen ... 159
12.9.1 ... auto ... 159
12.9.2 ... extern ... 160
12.9.3 ... register ... 160
12.9.4 ... static ... 160
12.10 ... Typ-Qualifizierer ...
160
12.10.1 ... volatile ... 160
12.10.2 ... const ... 161
12.11 ... Geltungsbereich von
Variablen ... 161
12.12 ... Speicherklassen-Spezifizierer
für Funktionen ... 162
12.12.1 ... extern ... 162
12.12.2 ... static ... 162
12.12.3 ... volatile ... 163
12.13 ... Datenaustausch zwischen
Funktionen ... 163
12.14 ... Funktion mit Wertübergabe
(call-by-value) 164
12.15 ... Rückgabewert von
Funktionen ... 167
12.16 ... Die Hauptfunktion main()
168
12.17 ... Funktionen der
Laufzeitbibliothek ... 170
12.18 ... Getrenntes Kompilieren von
Quelldateien ... 171
12.19 ... Rekursive Funktionen ...
173
12.19.1 ... Exkurs: Stack ... 173
12.19.2 ... Rekursionen und der
Stack ... 173
12.19.3 ... Fakultät ... 178
12.19.4 ... Spiegeln eines Textes ...
178
12.19.5 ... Fibonacci-Zahlen ...
179
12.19.6 ... Größter gemeinsamer Teiler
(GGT) 179
12.19.7 ... Dezimalzahl zu Dualzahl ...
182
13 ... Präprozessor-Direktiven ...
185
13.1 ... Einkopieren von Dateien
mittels #include ... 187
13.2 ... Makros und Konstanten –
#define ... 190
13.2.1 ... Symbolische Konstanten mit
#define ... 190
13.2.2 ... Makros mit #define ...
194
13.3 ... Bedingte Kompilierung ...
197
13.4 ... Vordefinierte Präprozessor-
Direktiven (ANSI C) 202
13.5 ... Ersetzung eines
Makroparameters durch einen String ...
203
13.6 ... #undef – Makronamen wieder
aufheben ... 204
13.7 ... Ausgeben von Fehlermeldungen –
#error ... 204
13.8 ... #pragma ... 205
14 ... Arrays ... 207
14.1 ... Arrays deklarieren ...
209
14.2 ... Initialisierung und Zugriff
auf Arrays ... 210
14.2.1 ... Gültigkeitsbereich von
Arrays ... 214
14.3 ... Arrays vergleichen ...
215
14.4 ... Anzahl der Elemente eines
Arrays ermitteln ... 217
14.5 ... Übergabe von Arrays an
Funktionen ... 218
14.6 ... Arrays aus Funktionen
zurückgeben ... 219
14.7 ... Programmbeispiel zu den
Arrays ... 220
14.8 ... Einlesen von Array-Werten ...
223
14.9 ... Mehrdimensionale Arrays ...
223
14.10 ... Mehrdimensionale Arrays
initialisieren ... 224
14.10.1 ... Tic Tac Toe ... 231
14.10.2 ... Dreidimensionale Arrays ...
235
14.11 ... Arrays in Tabellenkalkulation
einlesen (*.CSV-Dateien)
236
14.12 ... Strings/Zeichenketten (char
Array) 237
14.12.1 ... Vom String zur
Binärzahl ... 240
14.13 ... Einlesen von Strings ...
242
14.14 ... Standard-Bibliothek
<string.h> 244
14.14.1 ... strcat() – Strings
aneinander hängen ... 245
14.14.2 ... strchr() – ein Zeichen im
String suchen ... 245
14.14.3 ... strcmp() – Strings
vergleichen ... 246
14.14.4 ... strcpy() – einen String
kopieren ... 247
14.14.5 ... strcspn() – einen
Teilstring ermitteln ... 247
14.14.6 ... strlen() – Länge eines
Strings ermitteln ... 248
14.14.7 ... strncat() – String mit n
Zeichen aneinander hängen ... 248
14.14.8 ... strncmp() – n Zeichen von
zwei Strings miteinander
vergleichen ... 249
14.14.9 ... strncpy() – String mit n
Zeichen kopieren ... 250
14.14.10 ... strpbrk() – Auftreten
bestimmter Zeichen suchen ... 250
14.14.11 ... strrchr() – das letzte
Auftreten eines bestimmten Zeichens im
String suchen ... 251
14.14.12 ... strspn() – erstes
Auftreten eines Zeichens, das nicht
vorkommt ... 251
14.14.13 ... strstr() – String nach
Auftreten eines Teilstrings
durchsuchen ... 252
14.14.14 ... strtok() – String anhand
bestimmter Zeichen zerlegen ...
252
15 ... Zeiger (Pointer) 255
15.1 ... Zeiger deklarieren ...
257
15.2 ... Zeiger initialisieren ...
258
15.2.1 ... Speichergröße von
Zeigern ... 268
15.3 ... Zeigerarithmetik ... 268
15.4 ... Zeiger, die auf andere Zeiger
verweisen ... 269
15.4.1 ... Subtraktion zweier
Zeiger ... 270
15.5 ... Typensicherung bei der
Dereferenzierung ... 271
15.6 ... Zeiger als Funktionsparameter
(call-by-reference) 271
15.6.1 ... Zeiger als Rückgabewert ...
274
15.7 ... Array und Zeiger ... 276
15.8 ... Zeiger auf Strings ...
281
15.8.1 ... Zeiger auf konstante Objekte
(Read-only-Zeiger) 282
15.9 ... Zeiger auf Zeiger und
Stringtabellen ... 282
15.9.1 ... Stringtabellen ... 283
15.10 ... Zeiger auf Funktionen ...
290
15.11 ... void-Zeiger ... 295
15.12 ... Äquivalenz zwischen Zeigern
und Arrays ... 297
16 ... Kommandozeilenargumente ...
301
16.1 ... Argumente an die
Hauptfunktion ... 303
16.2 ... Optionen (Schalter) aus der
Kommandozeile auswerten ... 308
17 ... Dynamische
Speicherverwaltung ... 317
17.1 ... Das Speicherkonzept ...
319
17.2 ... Speicherallozierung mit malloc
() 320
17.2.1 ... NULL-Zeiger bei der
Speicherreservierung ... 323
17.2.2 ... Möglichkeiten der
Speicherreservierung und ihre
Probleme ... 323
17.2.3 ... free() – Speicher wieder
freigeben ... 324
17.3 ... Die Freispeicherverwaltung ...
326
17.3.1 ... Prozessinterne
Freispeicherverwaltung ... 327
17.4 ... Dynamisches Array ... 329
17.5 ... Speicher dynamisch reservieren
mit realloc und calloc ... 333
17.6 ... Speicher vom Stack anfordern
mit alloca (nicht ANSI C)
336
17.7 ... free – Speicher wieder
freigeben ... 337
17.8 ... Zweidimensionale dynamische
Arrays ... 337
17.9 ... Wenn die Speicherallozierung
fehlschlägt ... 340
17.9.1 ... Speicheranforderung
reduzieren ... 341
17.9.2 ... Speicheranforderungen
aufteilen ... 342
17.9.3 ... Einen Puffer konstanter
Größe verwenden ... 343
17.9.4 ... Zwischenspeichern auf
Festplatte vor der Allozierung ...
343
17.9.5 ... Nur so viel Speicher
anfordern wie nötig ... 343
18 ... Strukturen ... 345
18.1 ... Struktur deklarieren ...
347
18.2 ... Initialisierung und Zugriff
auf Strukturen ... 348
18.3 ... Strukturen als Wertübergabe an
eine Funktion ... 352
18.4 ... Strukturen als Rückgabewert
einer Funktion ... 354
18.5 ... Strukturen vergleichen ...
356
18.6 ... Arrays von Strukturen ...
357
18.7 ... Strukturen in Strukturen
(Nested Structurs) 363
18.8 ... Kurze Zusammenfassung zu den
Strukturen ... 372
18.9 ... Union ... 373
18.10 ... Aufzählungstyp enum ...
377
18.11 ... Typendefinition mit
typedef ... 379
18.12 ... Attribute von Strukturen
verändern (nicht ANSI C)
383
18.13 ... Bitfelder ... 386
18.14 ... Differenzen zwischen C und
C++ (Strukturen) 391
18.15 ... Das offsetof-Makro ...
393
19 ... Ein-/Ausgabe-Funktionen ...
395
19.1 ... Was ist eine Datei?
397
19.2 ... Formatierte und unformatierte
Ein-/Ausgabe ... 397
19.3 ... Streams ... 397
19.4 ... Höhere Ein-/Augabe-
Funktionen ... 398
19.5 ... Datei (Stream) öffnen –
fopen ... 399
19.5.1 ... Modus für fopen()
401
19.5.2 ... Maximale Anzahl geöffneter
Dateien – FOPEN_MAX ... 403
19.6 ... Zeichenweises Lesen und
Schreiben – getchar und putchar ...
404
19.6.1 ... Ein etwas portableres getch()
406
19.7 ... Zeichenweises Lesen und
Schreiben – putc/fputc und
getc/fgetc ... 407
19.8 ... Datei (Stream) schließen –
fclose ... 412
19.9 ... Formatiertes Einlesen/Ausgeben
von Streams mit fprintf und fscanf ...
415
19.10 ... Standard-Streams in C ...
419
19.10.1 ... Standard-Streams
umleiten ... 420
19.11 ... Fehlerbehandlung von Streams –
feof, ferror und clearerr ... 422
19.12 ... Gelesenes Zeichen in die
Eingabe zurückschieben – ungetc ...
423
19.13 ... (Tastatur-)Puffer leeren –
fflush ... 424
19.13.1 ... Pufferung ... 425
19.14 ... Stream positionieren – fseek,
rewind und ftell ... 426
19.15 ... Stream positionieren –
fsetpos, fgetpos ... 429
19.16 ... Zeilenweise Ein-/Ausgabe von
Streams ... 431
19.16.1 ... Zeilenweise lesen mit gets
und fgets ... 431
19.16.2 ... Zeilenweise schreiben mit
puts und fputs ... 434
19.16.3 ... Zeilenweise einlesen vom
Stream mit getline() (nicht ANSI C)
435
19.16.4 ... Rezepte für zeilenweises
Einlesen und Ausgeben ... 436
19.17 ... Blockweises Lesen und
Schreiben – fread und fwrite ...
443
19.17.1 ... Blockweises Lesen – fread()
444
19.17.2 ... Blockweises Schreiben –
fwrite() 445
19.17.3 ... Big-Endian und Little-
Endian ... 450
19.18 ... Datei (Stream) erneut öffnen –
freopen ... 452
19.19 ... Datei löschen oder
umbenennen – remove und rename ...
453
19.19.1 ... remove() 453
19.19.2 ... rename() 455
19.20 ... Pufferung einstellen – setbuf
und setvbuf ... 455
19.21 ... Temporäre Dateien erzeugen –
tmpfile und tmpnam ... 461
19.22 ... Fehlerausgabe mit strerror
und perror ... 465
19.23 ... Formatiert in einen String
schreiben und formatiert aus einem
String lesen – sscanf und sprintf ...
468
19.24 ... Fortgeschrittenes Thema ...
471
19.25 ... Low-Level-Datei-I/O-
Funktionen (nicht ANSI C)
479
19.26 ... Datei öffnen – open ...
479
19.27 ... Datei schließen – close ...
484
19.28 ... Datei erzeugen – creat ...
485
19.29 ... Schreiben und Lesen – write
und read ... 486
19.30 ... File-Deskriptor
positionieren – lseek ... 495
19.31 ... File-Deskriptor von einem
Stream – fileno ... 496
19.32 ... Stream von File-Deskriptor –
fdopen ... 497
20 ... Attribute von Dateien und
Arbeiten mit Verzeichnissen (nicht ANSI
C) 499
20.1 ... Attribute einer Datei
ermitteln – stat() 501
20.1.1 ... stat() – st_mode ...
502
20.1.2 ... stat() – st_size ...
507
20.1.3 ... stat() – st_atime, st_mtime
und st_ctime ... 509
20.1.4 ... stat() – st_gid und
st_uid ... 513
20.1.5 ... stat() – st_nlink und
st_ino ... 513
20.1.6 ... stat() – st_dev und
st_rdev ... 514
20.2 ... Prüfen des Zugriffsrechts –
access ... 516
20.3 ... Verzeichnis-Funktionen ...
519
20.3.1 ... Verzeichnis erstellen,
löschen und wechseln – mkdir, rmdir und
chdir ... 519
20.3.2 ... Wechseln in das
Arbeitsverzeichnis – getcwd ...
523
20.3.3 ... Verzeichnisse öffnen, lesen
und schließen – opendir, readdir und
closedir ... 525
21 ... Arbeiten mit variablen
langen Argumentlisten – <stdarg.h>
531
21.1 ... Makros in <stdarg.h> –
va_list, va_arg, va_start und
va_end ... 533
21.2 ... Argumentliste am Anfang oder
Ende kennzeichnen ... 534
21.3 ... vprintf, vsprintf und
vfsprintf ... 538
22 ... Zeitroutinen ... 541
22.1 ... Die Headerdatei <time.h>
543
22.1.1 ... Konstanten in der
Headerdatei <time.h>
544
22.1.2 ... Datums – und Zeitfunktionen
in <time.h> 544
22.2 ... Laufzeitmessung (Profiling)
553
23 ... Weitere Headerdateien und
ihre Funktionen (ANSI C) 555
23.1 ... <assert.h> –
Testmöglichkeiten und Fehlersuche ...
557
23.2 ... <ctype.h> –
Zeichenklassifizierung und
Umwandlung ... 558
23.3 ... Mathematische Funktionen –
<math.h> 561
23.4 ... <stdlib.h>
563
23.4.1 ... Programmbeendigung – exit(),
_exit(), atexit() und abort()
563
23.4.2 ... Konvertieren von Strings in
numerische Werte ... 565
23.4.3 ... Zufallszahlen ... 569
23.4.4 ... Absolutwerte, Quotient und
Rest von Divisionen ... 570
23.4.5 ... Suchen und Sortieren – qsort
() und bsearch() 572
23.4.6 ... system() 574
23.5 ... <setjmp.h>
575
23.6 ... <signal.h>
579
23.7 ... <string.h> – Die mem…-
Funktionen zur Speichermanipulation ...
584
23.7.1 ... memchr() – Suche nach
einzelnen Zeichen ... 584
23.7.2 ... memcmp() – Bestimmte Anzahl
von Bytes vergleichen ... 584
23.7.3 ... memcpy() – Bestimmte Anzahl
von Bytes kopieren ... 585
23.7.4 ... memmove() – Bestimmte Anzahl
von Bytes kopieren ... 585
23.7.5 ... memset() – Speicherbereich
mit bestimmten Zeichen auffüllen ...
586
23.8 ... Erweiterter ANSI C-Standard
(ANSI C99) 586
23.8.1 ... Neue elementare
Datentypen ... 587
23.8.2 ... <stdint.h> –
Ganzzahlige Typen mit vorgegebener
Breite ... 587
23.8.3 ... Komplexe Gleitpunkttypen ...
588
23.8.4 ... <iso646.h> –
Symbolische Konstanten für
Operatoren ... 588
23.8.5 ... Deklaration von
Bezeichnern ... 588
23.8.6 ... inline-Funktionen ...
588
23.8.7 ... Vordefinierte Makros ...
589
23.8.8 ... <math.h> – Neue
Funktionen ... 590
23.8.9 ... Zusammenfassung ... 592
24 ... Dynamische
Datenstrukturen ... 593
24.1 ... Lineare Listen (einfach
verkettete Listen) 595
24.1.1 ... Erstes Element der Liste
löschen ... 601
24.1.2 ... Beliebiges Element in der
Liste löschen ... 602
24.1.3 ... Elemente der Liste
ausgeben ... 605
24.1.4 ... Eine vollständige Liste auf
einmal löschen ... 610
24.1.5 ... Element in die Liste
einfügen ... 612
24.2 ... Doppelt verkettete Listen ...
618
24.3 ... Stacks nach dem LIFO(Last-in-
First-out)-Prinzip ... 634
24.4 ... Queues nach dem FIFO-
Prinzip ... 653
25 ... Algorithmen ... 661
25.1 ... Was sind Algorithmen?
663
25.2 ... Wie setze ich Algorithmen ein?
663
25.3 ... Sortieralgorithmen ...
663
25.3.1 ... Selektion Sort – Sortieren
durch Auswählen ... 664
25.3.2 ... Insertion Sort ... 666
25.3.3 ... Bubble Sort ... 668
25.3.4 ... Shellsort ... 669
25.3.5 ... Quicksort ... 672
25.3.6 ... qsort() 678
25.3.7 ... Zusammenfassung der
Sortieralgorithmen ... 679
25.4 ... Code optimieren ... 686
25.4.1 ... Lokale Variablen ...
687
25.4.2 ... Funktionsaufrufe ...
687
25.4.3 ... Datentypen ... 687
25.4.4 ... Schleifen ... 687
25.4.5 ... Kontrollstrukturen ...
688
25.4.6 ... Verschiedenes ... 689
25.5 ... Suchalgorithmen – Grundlage
zur Suche ... 689
25.5.1 ... Lineare Suche ... 690
25.5.2 ... Binäre Suche ... 692
25.5.3 ... Binäre (Such-)Bäume ...
694
25.5.4 ... Elemente im binären Baum
einordnen ... 696
25.5.5 ... Binäre Bäume travesieren ...
700
25.5.6 ... Löschen eines Elements im
binären Baum ... 701
25.5.7 ... Ein binärer Suchbaum in der
Praxis ... 703
25.5.8 ... Binäre Suchbäume mit Eltern-
Zeiger und Threads ... 712
25.5.9 ... Ausgeglichene Binärbäume ...
713
25.5.10 ... Algorithmen für
ausgeglichene Bäume – eine
Übersicht ... 714
25.6 ... Hashing (Zerhacken)
715
25.6.1 ... Wann wird Hashing verwendet?
715
25.6.2 ... Was ist für das Hashing
erforderlich? 715
25.6.3 ... Hash-Funktion ... 720
25.6.4 ... Hashing mit direkter
Adressierung ... 723
25.6.5 ... Vergleich von Hashing mit
binären Bäumen ... 724
25.7 ... String Matching ... 724
25.7.1 ... Brute-Force-Algorithmus ...
725
25.7.2 ... Der Algorithmus von Knuth,
Morris und Pratt (KMP) 727
25.7.3 ... Weitere String Matching-
Algorithmen ... 734
25.8 ... Pattern Matching (reguläre
Ausdrücke) 734
26 ... Sicheres Programmieren ...
741
26.1 ... Buffer Overflow
(Speicherüberlauf) 744
26.1.1 ... Speicherverwaltung von
Programmen ... 745
26.1.2 ... Der Stack-Frame ... 746
26.1.3 ... Rücksprungadresse
manipulieren ... 747
26.1.4 ... Gegenmaßnahmen zum Buffer
Overflow während der
Programmerstellung ... 752
26.1.5 ... Gegenmaßnahmen zum Buffer
Overflow, wenn das Programm fertig
ist ... 754
26.1.6 ... Programme und Tools zum
Buffer Overflow ... 757
26.1.7 ... Ausblick ... 758
26.2 ... Memory Leaks (Speicherlecks)
758
26.2.1 ... Bibliotheken und Tools zu
Memory Leaks ... 761
26.3 ... Tipps zu
Sicherheitsproblemen ... 763
27 ... CGI mit C ... 765
27.1 ... Was ist CGI? 767
27.2 ... Vorteile von CGIs in C ...
768
27.3 ... Andere Techniken der
Webprogrammierung ... 768
27.4 ... Das dreistufige
Webanwendungsdesign ... 768
27.4.1 ... Darstellungsschicht ...
768
27.4.2 ... Verarbeitungsschicht ...
769
27.4.3 ... Speicherschicht ... 770
27.5 ... Clientseitige
Programmierung ... 770
27.5.1 ... JavaScript ... 770
27.5.2 ... Java-Applets ... 770
27.6 ... Serverseitige
Programmierung ... 771
27.7 ... Der Webserver ... 771
27.7.1 ... Das Client/Server-Modell des
Internets ... 771
27.7.2 ... Serverimplementierung ...
772
27.7.3 ... Hosting-Services ...
773
27.7.4 ... Schlüsselfertige Lösung ...
773
27.7.5 ... Weitere Möglichkeiten ...
773
27.7.6 ... Apache ... 774
27.8 ... Das HTTP-Protokoll ...
783
27.8.1 ... Web-Protokolle ... 783
27.8.2 ... Wozu Protokolle?
783
27.8.3 ... Was ist ein Protokoll?
783
27.8.4 ... Normen für die
Netzwerktechnik ... 784
27.8.5 ... Das OSI-Schichtenmodell ...
784
27.8.6 ... Die Elemente einer URL ...
785
27.8.7 ... Client-Anfrage – HTTP
Request (Browser-Request)
786
27.8.8 ... Server-Antwort (Server-
Response) 789
27.8.9 ... Zusammenfassung ... 792
27.9 ... Das Common Gateway Interface
(CGI) 792
27.9.1 ... Filehandles ... 792
27.9.2 ... CGI-Umgebungsvariablen ...
793
27.9.3 ... CGI-Ausgabe ... 797
27.10 ... HTML-Formulare ... 800
27.10.1 ... Die Tags und ihre
Bedeutung ... 800
27.11 ... CGI-Eingabe ... 806
27.11.1 ... Die Anfrage des Clients an
den Server ... 806
27.11.2 ... Eingabe parsen ... 810
27.12 ... Ein Gästebuch ... 814
27.12.1 ... Das HTML-Formular
(guestbook.html) 815
27.12.2 ... Das CGI-Programm
(auswert.cgi) 816
27.12.3 ... Das HTML-Gästebuch
(gaeste.html) 824
27.12.4 ... Das Beispiel ausführen ...
824
27.13 ... Ausblick ... 826
28 ... MySQL und C ... 827
28.1 ... Aufbau eines
Datenbanksystems ... 829
28.1.1 ... Warum wurde ein
Datenbanksystem (DBS) entwickelt?
829
28.1.2 ... Das Datenbank-Management-
System (DBMS) 830
28.1.3 ... Relationale Datenbank ...
832
28.1.4 ... Eigene Clients mit C für SQL
mit der ODBC-API entwickeln ...
832
28.2 ... MySQL installieren ...
833
28.2.1 ... Linux ... 833
28.2.2 ... Windows ... 833
28.2.3 ... Den Client mysql starten ...
834
28.3 ... Crashkurs (My)SQL ... 835
28.3.1 ... Was ist SQL? 835
28.3.2 ... Die Datentypen von (My)
SQL ... 835
28.3.3 ... Eine Datenbank erzeugen ...
837
28.3.4 ... Eine Datenbank löschen ...
838
28.3.5 ... Datenbank wechseln ...
839
28.3.6 ... Eine Tabelle erstellen ...
839
28.3.7 ... Die Tabelle anzeigen ...
840
28.3.8 ... Tabellendefinition
überprüfen ... 840
28.3.9 ... Tabelle löschen ... 840
28.3.10 ... Struktur einer Tabelle
ändern ... 841
28.3.11 ... Datensätze eingeben ...
841
28.3.12 ... Datensätze auswählen ...
842
28.3.13 ... Ein fortgeschrittenes
Szenario ... 843
28.3.14 ... Datensatz löschen ...
844
28.3.15 ... Datensatz ändern ...
844
28.3.16 ... Zugriffsrechte in MySQL ...
844
28.3.17 ... Übersicht über einige SQL-
Kommandos ... 845
28.4 ... Die MySQL C-API ... 847
28.4.1 ... Grundlagen zur
Programmierung eines MySQL-Clients ...
847
28.4.2 ... Client-Programm mit dem gcc-
unter Linux und dem Cygwin gcc-Compiler
unter Windows ... 848
28.4.3 ... MySQL Client-Programme mit
dem VC++-Compiler und dem Borland
Freeware Compiler ... 849
28.4.4 ... Troubleshooting ... 850
28.4.5 ... Das erste Client-Programm –
Verbindung mit dem MySQL-Server
herstellen ... 851
28.4.6 ... MySQL-Kommandozeilen-
Optionen ... 855
28.4.7 ... Anfrage an den Server ...
857
28.5 ... MySQL und C mit CGI ...
873
28.5.1 ... HTML-Eingabeformular ...
874
28.5.2 ... CGI-Anwendung add_db.cgi ...
875
28.5.3 ... CGI-Anwendung
search_db.cgi ... 882
28.6 ... Funktionsübersicht ...
890
28.7 ... Datentypenübersicht der C-
API ... 893
29 ... Wie geht’s jetzt weiter?
895
A ... Anhang ... 899
A.1 ... Rangfolge der Operatoren ...
901
A.2 ... ASCII-Code-Tabelle ... 903
A.3 ... Reservierte Schlüsselwörter in
C ... 904
A.4 ... Standard-Headerdateien der ANSI
C-Bibliothek ... 904
A.5 ... Weiterführende Links ...
904
A.6 ... Weiterführende Literatur ...
904
A.6.1 ... Bücher zum ANSI C-
Standard ... 905
A.6.2 ... Algorithmen und
Datenstrukturen ... 905
A.6.3 ... HTML, CGI-
Webprogrammierung ... 905
A.6.4 ... Linux/UNIX ... 906
A.6.5 ... MySQL ... 906
Index ... 907
Zurück zu »C von A bis Z«
|
|
|
 |
|
|