ebook img

C unter UNIX: Eine grundlegende Einführung für Programmierer Unter Berücksichtigung des ANSI-Standards PDF

511 Pages·1992·26.64 MB·German
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview C unter UNIX: Eine grundlegende Einführung für Programmierer Unter Berücksichtigung des ANSI-Standards

Klaus Kannemann, M. Sc. C unter UNIX P rog rammierbücher ~-- für den anspruchsvollen Leser Microsoft C-Programmierhandbuch Ein Microsoft PressNieweg-Buch von K. Jamsa Grafikprogrammierung mit C Ein Microsoft PressNieweg-Buch von K. Jamsa Die Microsoft Programmer's Workbench Arbeiten mit dem Microsoft C/C++ PDS 7.0 von Thomas Kregeloh Das Vieweg Buch zu Borland C++ 3.0 von Axel Kotulla Objektorientiert mit Turbo C++ von Martin Aupperle Das Vieweg-Buch zu C++ Version 3 von F. Bause und W. Tölle UNIX- Das Betriebssystem und die Shells Eine grundlegende Einführung von K. Kannemann, M. Sc. C unter UNIX Eine grundlegende Einführung für Programmierer Unter Berücksichtigung des ANS I-Standards von K. Kannemann, M. Sc. Referenzhandbuch Standard C Für den ANSI-und ISO-Standard Ein Microsoft PressNieweg-Buch von P.J. Plauger und J. Brodie Verteilte Systeme unter UNIX von W . Brecht Die Vieweg C++ Toolbox von M. Rebentisch Vieweg -------------------- Klaus Kannemann, M. Sc. C unter UNIX Eine grundlegende Einführung für Programmierer Unter Berücksichtigung des ANS I-Standards IJ Vleweg Die Deutsche Bibliothek -CIP-Einheitsaufuahme Kannemann, Klaus: C unter UNIX : eine grundlegende Einfiihrung rur Programmierer; unter Berücksichtigung des ANSI-Standards / Klaus Kannemann. -Braunschweig; Wiesbaden: Vieweg, 1992 Das in diesem Buch enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Der Autor und der Verlag übernehmen infolgedessen keine Verantwortung und werden keine dar aus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programm Materials oder Teilen davon entsteht. Alle Rechte vorbehalten © Friedr. Vieweg & Sohn Verlagsgesellschaft mbH, BraunschweiglWiesbaden, 1992 Softcover reprint ofthe hardcover I st edition 1992 Der Verlag Vieweg ist ein Unternehmen der Verlagsgruppe Bertelsmann International. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere rur Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeiche rung und Verarbeitung in elektronischen Systemen. Umschlagsgestaltung: Schrimpf & Partner, Wiesbaden Druck und buchbinderische Verarbeitung: Paderborner Druckcentrum, Paderborn Gedruckt auf säurefreiem Papier ISBN-13: 978-3-322-83056-2 e-ISBN-13: 978-3-322-83055-5 DOI: 10.1007/978-3-322-83055-5 v Vorwort Das Buch richtet sich einerseits an Programmierer und System-Analytiker, die bisher hauptsächlich mit herkömmlichen Hochsprachen wie COBOL und FORTRAN befaßt waren und sich nun auf den Übergang zur Program miersprache C unter UNIX vorbereiten wollen. Andererseits sollen aber auch Techniker, Ingenieure und Wissenschaftler, darunter Chemiker, Physiker, Mathematiker und Statistiker, angesprochen werden, die aus persönlichem Interesse oder beruflicher Notwendigkeit einen intellektuell angemessenen Einstieg in das Programmieren suchen, ohne dabei das Risiko eingehen zu wollen, kostbare Zeit und Energien an obskure oder potentiell obsolete Programmiersprachen oder -systeme zu verwenden. Erfahrene C-Programmierer aus der PC-Welt mögen zahlreiche Einzel heiten und gewisse Aspekte der C-Programmierung unter UNIX von Interesse finden. Die Darstellung der C-Sprache erfolgt selbstverständlich unter gründlicher Berücksichtigung des ANSI-Standards. In der Tat ist die Beherrschung der Programmiersprache C unter dem Betriebssystem UNIX eine sehr sichere und zukunftsträchtige Anlage des beträchtlichen persönlichen Einsatzes an Zeit und Anstrengung, den der Einstieg in die Materie fordert. C und UNIX vervollständigen, ja poten zieren sich gegenseitig zu einer Technologie-Plattform, deren Anwen dungsmöglichkeiten alles Herkömmliche übertreffen und deren Aktualität, Omnipräsenz und Beständigkeit weit in das nächste Millenium gesichen sind. Zu diesen, im wesentlichen techno-pragmatischen Beweggründen mag sich noch die intellektuelle Herausforderung gesellen, an dieser rasanten Entwicklung doch irgendwie teilnehmen zu können, dabei zu sein, nicht abseits stehen zu bleiben. Zwei Vorgaben liegen diesem Buch zugrunde. Erstens sollte dem Leser ein intellektuell angemessener Einstieg durch mitdenkendes Lesen und nachdenkendes Verstehen ermöglicht werden, anstelle ihn zum Nachahmen von mehr oder weniger künstlichen und langatmigen Programmvorlagen einzuladen, die zumeist doch nur an der realen Praxis vorbeigehen. Die Programmbeispiele in diesem Buch sind dementsprechend kurz gehalten, um die Aufmerksamkeit des Lesers an das Wesentliche zu fesseln. Zweitens sollte die C-Sprache das zentrale Thema darstellen, und nicht als Substrat für andere Theorien, Dogmen oder sonstige weitreichende Ambitionen dienen. Diesem disziplinarischen Vorsatz liegt die mechani stische und formale Betrachtungsweise des applied systems engineering zugrunde. dessen Konzepte und Begriffskategorien sich durch subjektbe zogene Sachlichkeit und Präzision auszeichnen. VI Vorwort Damit entstand zugleich die Aufgabe der Umsetzung dieser Konzepte und Begriffskategorien in eine kohärente und in sich konsistente sprachliche Darstellung. Die damit verbundene techno-literarische Herausforderung wurde dabei gewissermaßen zur Inspiration. Das vorliegende Buch stellt das Kondensat vieler Erfahrungsjahre in der C Programmierung unter UNIX dar, von denen der rein persönliche Anteil des Autors jedoch nur einen Bruchteil ausmachen kann. Den Hauptanteil stellt der Erfahrungsschatz, den der Autor als Prüfer und Revisor von zahl losen C-Programmen sammeln und integrieren konnte. In der nostalgi schen Erinnerung an jene, von dieser dankbaren Aufgabe erfüllten Jahre, verbleiben alle jene Programmierer, die in den vielen joint code readings freimütig Rede und Antwort standen, warum man dies eben so, und jenes genau anders gemacht habe. Die daraus resultierenden Erkenntnisse und Schlußfolgerungen hinsichtlich der intellektuellen Bewältigung von Programmiersprachen und der dabei entstehenden sprachlichen Kommuni kationsprobleme haben dieses Buch denn auch geprägt. Mit Hingabe und Ausdauer waren auch diesmal wieder dabei: Frau A. Kumbartzky, Textgestaltung und -überprüfung sowie Erstellung der Sachverzeichnisse; Frank Kannemann, Auswahl und Vertiefung von Beispielen sowie die Verifikation technischer Einzelheiten; Thomas Kannemann, thematische Aufgliederung. Ihnen gilt mein besonderer Dank. Vanier, Canada August 1992 K. K. VII Inhaltsverzeichnis 1 Einführung und Vorbereitung ............................................................ 1 1.1 Grundlegende Betrachtungen .......................................................... 1 1.2.1 Programmierung ............................................................................ 2 1.1.2 Betriebssysteme und Benutzerprogramme .................................... 3 1.1.3 Kategorien von Programmiersprachen .......................................... 4 1.2 Die Programmiersprache C ............................................................. 8 1.3 Hinweise zur Dokumentation ........................................................ 12 1.4 Formale Schreibweise der C-Syntax ............................................. 15 2 Die C-Programmierumgebung. ........................................................ 17 2.1 Die UNIX-Shells ........................................................................... 17 2.2 Quelldateien .................................................................................. 19 2.3 Befehle und Anweisungen zur Arbeitsumgebung ......................... 21 2.4 Quellkode-Verarbeitung ................................................................ 26 2.4.1 Quellkode-Formatierung ............................................................. 27 2.4.2 Erzeugung von Querverweisen .................................................... 28 2.4.3 Darstellung von Aufrufverschachtelungen .................................. 29 2.4.4 Weitere Hilfseinrichtungen ......................................................... 30 2.5 Verwaltung von Quelldateien. ....................................................... 36 3 Quellkode-Aufbereitung .................................................................. 42 3.1 Der C-Präprozessor ....................................................................... 43 3.2 Lexikalische Aufbereitung ............................................................ 45 3.2.1 Kommentare ................................................................................ 45 3.2.2 Zeilenfortsetzung ......................................................................... 46 3.2.3 Die ANSI-Trigraph-Folgen ......................................................... 47 3.2.4 Die ANSI-Makros ....................................................................... 48 3.2.5 Lexikalische Substititonsregeln ................................................... 48 3.3 Aufbereitungsanweisungen ........................................................... 49 3.4 Symbolische Substitutionen .......................................................... 51 3.5 Makro-Definitionen ....................................................................... 54 3.6 Bedingte Inklusion von Kode-Segmenten ..................................... 60 3.7 Einbinden von Zusatzdateien ........................................................ 66 VIII Grundlagen der C-Programmierung unter UNIX 4 Die C-Prograrnmstruktur ................................................................. 69 4.1 Die lexikalische Ebene .................................................................. 70 4.2 Die syntaktischen Elemente .......................................................... 71 4.2.1 Schlüsselworte ............................................................................. 71 4.2.2 Bezeichner ................................................................................... 72 4.2.3 Generische Konstante .................................................................. 73 4.2.4 Operatoren und Begrenzer ........................................................... 81 4.2.5 Kommentare ................................................................................ 81 4.3 Ausdrücke ...................................................................................... 82 4.4 Einfache Statements ...................................................................... 84 4.5 Struktur-Einheiten höherer Ordnung ............................................. 86 4.5.1 Block-Statements ......................................................................... 86 4.5.2 Funktionsblöcke .......................................................................... 88 4.5.3 Quellkode-Module ....................................................................... 89 5 Datenobjekte .................................................................................... 90 5.1 Definitionen und Deklarationen .................................................... 92 5.2 Speicherklassen ............................................................................. 95 5.2.1 Der Geltungsbereich von Bezeichnern ........................................ 96 5.2.2 Vorbelegung und Beständigkeit .................................................. 99 5.2.3 Register-Variable ....................................................................... 103 5.3 Die primitiven Objekttypen ......................................................... 105 5.3.1 Die Integral-Typen .................................................................... 106 5.3.2 Die Gleitpunkt-Typen ................................................................ 112 5.3.3 Enumerierte Nominalvariable ................................................... 117 5.3.4 ANS 1-Typen .............................................................................. 119 5.4 Zeiger ......................................................................................... 120 5.4.1 Primäre Zeiger ........................................................................... 121 5.4.2 Zeiger höherer Ordnung ............................................................ 125 5.5 Homogene Aggregate .................................................................. 126 5.5.1 Singletone und Skalare .............................................................. 126 5.5.2 Arrays ........................................................................................ 127 5.5.3 Arrays und Zeiger ...................................................................... 137 5.6 Heterogene Aggregate ................................................................. 149 5.6.1 Strukturen .................................................................................. 149 5.6.2 Überlagerungen ......................................................................... 173 5.7 Typungsvereinbarungen .............................................................. 181 Inhaltsverzeichnis IX 5.8 Dynamische Speicherverwaltung ................................................ 185 5.8.1 Anlegen von Speicherbereichen ................................................ 186 5.8.2 Modifizieren und Freisetzen ...................................................... 189 5.8.3 Unterschiede zum traditionellen Standard. ................................ 191 6 Die Auswertung von Ausdrücken. ................................................. 192 6.1 Primitive Operationen ................................................................. 192 6.1.1 Primitive Operatoren ................................................................. 193 6.1.2 Die Auswertung primitiver Operationen ................................... 196 6.2 Typung und Anung von Ausdrücken .......................................... 199 6.2.1 L-Werte und R-Werte ................................................................ 199 6.2.2 Artungsanpassung ...................................................................... 200 6.2.3 Typungsanpassung .................................................................... 203 6.3 Objektbezogene Postfix- und Präfix-Operationen ...................... 204 6.3.1 Postfix-Ausdrücke ..................................................................... 204 6.3.2 Inkrementation und Dekrementation in situ .............................. 209 6.4 Arithmetische Operationen ......................................................... 213 6.4.1 Multiplikative Arithmetik .......................................................... 216 6.4.2 Additive Arithmetik. .................................................................. 218 6.5 Bit-bezogene Operationen ........................................................... 220 6.5.1 Die unären Bit-Operatoren ........................................................ 220 6.5.2 Die binären Bit-Operatoren ....................................................... 222 6.6 Logische Operationen ................................................................. 226 6.6.1 Relationale Operationen ............................................................ 227 6.6.2 Bool'sche Operationen .............................................................. 229 6.7 Zuweisungsausdrücke ................................................................. 232 6.7.1 Unmittelbare Wertzuweisungen ................................................ 232 6.7.2 Dyadische Zuweisungsoperatoren ............................................. 234 6.8 Bedingte und geriChtete Auswertung .......................................... 235 6.8.1 Bedingte Auswertung ................................................................ 235 6.8.2 Gerichtete Ausdrucksfolgen ...................................................... 237 6.9 Zeigerausdrücke .......................................................................... 239 6.9.1 Zeiger-Arithmetik ...................................................................... 239 6.9.2 Anwendung auf Arrays .............................................................. 241 6.9.3 Die Aufteilung von Speicherbereichen ..................................... 246 x Grundlagen der C-Programmierung unter UNIX 7 Prozeßbezogene Ablaufsteuerung ................................................. 249 7.1 Synchrone Ablaufsteuerung ........................................................ 251 7.1.1 Bedingungsfreie Ablaufsteuerung ............................................. 251 7.1.2 Bedingungsgebundene Ablaufsteuerung ................................... 258 7 .1.3 G~richtete Ablaufsteuerung ....................................................... 271 7.2 Asynchrone Ablaufsteuerung ...................................................... 285 7.2.1 Ereignisse und Signale .............................................................. 286 7.2.2 Aktionsfunktionen ..................................................................... 293 7.2.3 Signalerzeugung in Prozessen ................................................... 304 7 .2.4 Kernel-Signale ........................................................................... 310 8 Funktionen in C ............................................................................. 314 8.1 Benutzerprogrammierte Funktionen ........................................... 316 8.1.1 Die Funktionsdeklaration .......................................................... 317 8.1.2 Die Funktionsdefinition ............................................................ 321 8.1.3 Argumente und Rückgabewerte ................................................ 327 8.1.4 Funktionszeiger ......................................................................... 343 8.1.5 Das Hauptprogramm ................................................................. 348 8.2 System-und Bibliotheksfunktionen ............................................ 354 8.2.1 Systemfunktionen ...................................................................... 355 8.2.2 Bibliotheksfunktionen ............................................................... 359 8.3 Die Verwaltung von Funktionen ................................................. 362 8.3.1 Kompilieren und Linken. ........................................................... 362 8.3.2 Objektmodule ............................................................................ 366 8.3.3 Link-Bibliotheken. ..................................................................... 369 9 Eingabe und Ausgabe .................................................................... 373 9.1 EtA-Objekte ................................................................................ 375 9.2 Objektzugriff und -verwaltung .................................................... 376 9.3 Unmittelbare, maschinennahe Byte-EtA ..................................... 385 9.3.1 Der grundlegende sequentielle Ansatz ...................................... 388 9.3.2 Objekt-orientierte Eingabe und Ausgabe .................................. 393 9.3.3 Höhere Zugriffsmethoden ......................................................... 396 9.3.4 Datenströme auf der Shell-Ebene .............................................. 403 9.3.5 Datenkanäle ............................................................................... 409 9.4 Mittelbare, gepufferte EtA .......................................................... 416 9.4.1 Byte-und objekt-orientierte E/A ............................................... 419 9.4.2 Steuer-und Hilfsfunktionen ...................................................... 424 9.4.3 Zeichen-und Zeichenketten-E/A .............................................. 429 9.4.4 Formatierte Eingabe und Ausgabe ............................................ 434

Description:
Das Buch richtet sich einerseits an Programmierer und System-Analytiker, die bisher hauptsächlich mit herkömmlichen Hochsprachen wie COBOL und FORTRAN befaßt waren und sich nun auf den Übergang zur Program­ miersprache C unter UNIX vorbereiten wollen. Andererseits sollen aber auch Techniker, In
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.