Gratis Versand in ganz Österreich
Bookbot

René Krooß

    Retro-Spiele programmieren mit dem Raspberry Pi
    Grundkurs C
    Systemnahe Programmierung mit C und Linux
    Grundkurs C
    • Grundkurs C

      C-Programmierung verständlich erklärt. Aktuell zum Standard C18. Ideal fürs Studium

      • 487 Seiten
      • 18 Lesestunden

      Die kompakte Einführung in C im praktischen Taschenbuchformat. Das Buch führt Sie übersichtlich in alle Sprachgrundlagen ein, bevor es um fortgeschrittene Themen wie Zeiger oder dynamische Speicherverwaltung geht. Mit dem aktuellen Standard C18, aber auch für ältere Compiler. Viele Codebeispiele und Tabellen sowie eine Funktionsreferenz machen das Buch zu Ihrem nützlichen Begleiter. Zu jedem Kapitel bieten Aufgaben mit kommentierten Lösungen eine Lernkontrolle und laden dazu ein, selbst Hand anzulegen. Ideal als Vorlesungsbegleiter oder zum Auffrischen. Aus dem Inhalt: Erste Schritte in C Verzweigungen und Schleifen Funktionen Präprozessor-Direktiven Arrays und Zeichenketten Zeiger Dynamische Speicherverwaltung Dynamische Datenstrukturen Eingabe- und Ausgabe-Funktionen Aktueller ISO-Standard C18 Inhaltsverzeichnis Vorwort ... 17 1. Einstieg in die Welt von C ... 21 1.1 ... Die Sprache C ... 21 1.2 ... Die C-Standardbibliothek ... 22 1.3 ... Die nötigen Werkzeuge für C ... 26 1.4 ... Übersetzen mit der Entwicklungsumgebung ... 29 1.5 ... Übersetzen mit GCC und Clang ... 33 1.6 ... Listings zum Buch ... 35 1.7 ... Kontrollfragen und Aufgaben im Buch ... 36 2. Erste Schritte in C ... 37 2.1 ... Das erste Programm in C ... 37 2.2 ... Die Funktion printf() ... 40 2.3 ... Zeichensätze in C ... 42 2.4 ... Symbole in C ... 45 2.5 ... Kommentare ... 50 2.6 ... Kontrollfragen und Aufgaben ... 52 3. Basisdatentypen in C ... 55 3.1 ... Variablen ... 55 3.2 ... Deklaration und Definition ... 56 3.3 ... Initialisierung und Zuweisung von Werten ... 58 3.4 ... Datentypen für Ganzzahlen ... 59 3.5 ... Datentypen für Zeichen ... 65 3.6 ... Datentypen für Fließkommazahlen ... 68 3.7 ... Boolescher Datentyp ... 72 3.8 ... Speicherbedarf mit sizeof ermitteln ... 73 3.9 ... Wertebereiche der Datentypen ermitteln ... 75 3.10 ... Konstanten erstellen ... 81 3.11 ... Lebensdauer und Sichtbarkeit von Variablen ... 82 3.12 ... void -- ein unvollständiger Typ ... 84 3.13 ... Kontrollfragen und Aufgaben ... 84 4. Rechnen mit C und Operatoren ... 85 4.1 ... Werte formatiert einlesen mit scanf() ... 85 4.2 ... Operatoren ... 89 4.3 ... Arithmetische Operatoren ... 93 4.4 ... Inkrement- und Dekrementoperator ... 95 4.5 ... Bitoperatoren ... 98 4.6 ... Implizite Typumwandlung ... 102 4.7 ... Explizite Typumwandlung ... 106 4.8 ... Mathematische Funktionen in C ... 107 4.9 ... Kontrollfragen und Aufgaben ... 112 5. Bedingte Anweisung und Verzweigung ... 115 5.1 ... Bedingte Anweisungen ... 115 5.2 ... Die alternative Verzweigung ... 121 5.3 ... Der Bedingungsoperator ?: ... 124 5.4 ... Die mehrfache Verzweigung mit if und else if ... 125 5.5 ... Mehrfache Verzweigung mit switch ... 130 5.6 ... Logische Verknüpfungen ... 136 5.7 ... Kontrollfragen und Aufgaben ... 143 6. Schleifen -- Programmteile wiederholen ... 147 6.1 ... Die Zählschleife -- for ... 147 6.2 ... Die kopfgesteuerte while-Schleife ... 152 6.3 ... Die fußgesteuerte do-while-Schleife ... 154 6.4 ... Kontrolliertes Verlassen von Schleifen ... 157 6.5 ... Kontrollfragen und Aufgaben ... 161 7. Funktionen erstellen ... 163 7.1 ... Funktionen definieren ... 164 7.2 ... Funktionen aufrufen ... 165 7.3 ... Funktionsdeklaration (Vorausdeklaration) ... 166 7.4 ... Funktionsparameter ... 169 7.5 ... Rückgabewert von Funktionen ... 171 7.6 ... Exkurs: Funktionen bei der Ausführung ... 175 7.7 ... Inline-Funktionen ... 176 7.8 ... Rekursionen ... 177 7.9 ... Die main()-Funktion ... 179 7.10 ... Programme mit exit() beenden ... 182 7.11 ... Globale, lokale und statische Variablen ... 183 7.12 ... Kontrollfragen und Aufgaben ... 191 8. Präprozessor-Direktiven ... 193 8.1 ... Dateien einfügen mit #include ... 194 8.2 ... Konstanten und Makros mit #define und #undef ... 195 8.3 ... Bedingte Kompilierung ... 202 8.4 ... Programmdiagnose mit assert() ... 209 8.5 ... Generische Auswahl ... 211 8.6 ... Eigene Header erstellen ... 213 8.7 ... Kontrollfragen und Aufgaben ... 215 9. Arrays und Zeichenketten (Strings) ... 219 9.1 ... Was genau sind Arrays? ... 219 9.2 ... Mehrdimensionale Arrays ... 232 9.3 ... Strings (Zeichenketten) ... 239 9.4 ... Kontrollfragen und Aufgaben ... 249 10. Zeiger (Pointer) ... 251 10.1 ... Zeiger vereinbaren ... 251 10.2 ... Zeiger verwenden ... 252 10.3 ... Zugriff auf den Inhalt von Zeigern ... 255 10.4 ... Zeiger als Funktionsparameter ... 260 10.5 ... Zeiger als Rückgabewert ... 261 10.6 ... Zeigerarithmetik ... 264 10.7 ... Zugriff auf Array-Elemente über Zeiger ... 265 10.8 ... Arrays und Zeiger als Funktionsparameter ... 268 10.9 ... char-Arrays und Zeiger ... 271 10.10 ... Arrays von Zeigern ... 272 10.11 ... void-Zeiger ... 275 10.12 ... Typqualifizierer bei Zeigern ... 276 10.13 ... Zeiger auf Funktionen ... 281 10.14 ... Kontrollfragen und Aufgaben ... 285 11. Dynamische Speicherverwaltung ... 289 11.1 ... Neuen Speicher zur Laufzeit reservieren ... 290 11.2 ... Speicherblöcke vergrößern oder verkleinern ... 295 11.3 ... Speicherblöcke wieder freigeben ... 300 11.4 ... Kontrollfragen und Aufgaben ... 302 12. Komplexe Datentypen ... 305 12.1 ... Strukturen ... 306 12.2 ... Unions ... 333 12.3 ... Der Aufzählungstyp enum ... 336 12.4 ... Eigene Typen mit typedef deklarieren ... 338 12.5 ... Kontrollfragen und Aufgaben ... 340 13. Dynamische Datenstrukturen ... 343 13.1 ... (Einfach) verkettete Listen ... 343 13.2 ... Doppelt verkettete Listen ... 357 13.3 ... Kontrollfragen und Aufgaben ... 358 14. Eingabe- und Ausgabefunktionen ... 361 14.1 ... Verschiedene Streams und Standard-Streams ... 361 14.2 ... Dateien ... 364 14.3 ... Dateien öffnen ... 365 14.4 ... Dateien schließen ... 371 14.5 ... Fehler oder Dateiende prüfen ... 372 14.6 ... Weitere Funktionen für die Ein- und Ausgabe ... 374 14.7 ... Funktionen zur formatierten Ein-/Ausgabe ... 387 14.8 ... Wahlfreier Dateizugriff ... 400 14.9 ... Sicherere Funktionen mit C11 ... 404 14.10 ... Datei löschen oder umbenennen ... 405 14.11 ... Pufferung ... 405 14.12 ... Kontrollfragen und Aufgaben ... 407 15. Zeitroutinen (time.h) ... 411 15.1 ... Die Funktion clock() ... 411 15.2 ... Erweiterte Zeitfunktionen ... 413 A. Übersichtstabellen wichtiger Sprachelemente ... 427 A.1 ... Operatorpriorität (Operator Precedence) ... 427 A.2 ... Reservierte Schlüsselwörter in C ... 429 A.3 ... Header-Dateien der Standardbibliothek ... 430 A.4 ... Kommandozeilenargumente ... 432 A.5 ... Weiterführende Ressourcen ... 435 B. Lösungen der Übungsaufgaben ... 437 B.1 ... Antworten und Lösungen zu Kapitel 2 ... 437 B.2 ... Antworten und Lösungen zu Kapitel 3 ... 438 B.3 ... Antworten und Lösungen zu Kapitel 4 ... 438 B.4 ... Antworten und Lösungen zu Kapitel 5 ... 440 B.5 ... Antworten und Lösungen zu Kapitel 6 ... 443 B.6 ... Antworten und Lösungen zu Kapitel 7 ... 446 B.7 ... Antworten und Lösungen zu Kapitel 8 ... 448 B.8 ... Antworten und Lösungen zu Kapitel 9 ... 451 B.9 ... Antworten und Lösungen zu Kapitel 10 ... 456 B.10 ... Antworten und Lösungen zu Kapitel 11 ... 461 B.11 ... Antworten und Lösungen zu Kapitel 12 ... 465 B.12 ... Antworten und Lösungen zu Kapitel 13 ... 469 B.13 ... Antworten und Lösungen zu Kapitel 14 ... 474 B.14 ... Antworten und Lösungen zu Kapitel 15 ... 476 Index ... 481

      Grundkurs C
    • Systemnahe Programmierung mit C und Linux

      Das umfassende Handbuch zur Linux-Anwendungsprogrammierung

      • 1386 Seiten
      • 49 Lesestunden

      Alles zur systemnahen Anwendungsprogrammierung: von den E/A-Funktionen, dem Zugriff auf Systeminformationen über Prozesse, Signale, Interprozesskommunikation und Threads bis hin zu Netzwerkprogrammierung, Datenbanken und GUIs. Für alle, die Programme schreiben wollen und alte Software warten oder portieren müssen. Alle Beispiele sind auch auf dem Raspberry Pi ausführbar. Solide C- und Linux-Kenntnisse werden vorausgesetzt. Aus dem Inhalt: E/A-Funktionen Attribute von Dateien und Verzeichnissen Zugriff auf Systeminformationen Devices - eine einfache Verbindung zur Hardware System- und Benutzerdateien Dämonen, Zombies und Prozesse Signale IPC - Interprozesskommunikation Threads Netzwerkprogrammierung Datenbanken (MySQL, PostgreSQL) GUIs mit GTK+ Werkzeuge für Programmierer Inhaltsverzeichnis Materialien zum Buch ... 23 1. Einführung ... 25 1.1 ... Anforderungen an den Leser ... 25 1.2 ... Anforderungen an das Betriebssystem ... 26 1.3 ... UNIX, der Vorgänger von Linux ... 27 1.4 ... Die Entwicklung von Linux ... 29 1.5 ... Der Compiler GCC -- eine kurze Einführung ... 31 1.6 ... POSIX, X/OPEN und ANSI C ... 37 1.7 ... Übersicht zu diesem Buch ... 40 1.8 ... Schreibkonventionen ... 42 1.9 ... Weitere Hilfen ... 43 2. E/A-Funktionen ... 45 2.1 ... Elementare E/A-Funktionen ... 45 2.2 ... Filedeskriptoren ... 47 2.3 ... Funktionen, die einen Filedeskriptor verwenden ... 50 2.4 ... Standard-E/A-Funktionen ... 99 2.5 ... Die Arbeit mit Verzeichnissen ... 113 2.6 ... Fehlerbehandlung ... 134 2.7 ... Ausblick ... 137 3. Attribute von Dateien und Verzeichnissen abfragen und ändern ... 139 3.1 ... Die Struktur stat ... 139 4. Zugriff auf Systeminformationen ... 157 4.1 ... Informationen aus dem /proc-Verzeichnis herausziehen ... 157 4.2 ... Hardware-/Systeminformationen ermitteln ... 160 4.3 ... Prozessinformationen auslesen ... 166 4.4 ... Kernel-Informationen in /proc ... 171 4.5 ... Verschiedene Dateisysteme unter Linux verwalten ... 180 4.6 ... Weiterführendes ... 181 5. Devices -- eine einfache Verbindung zur Hardware ... 183 5.1 ... Die Gerätedateitypen ... 183 5.2 ... Die Gerätedateinummern ... 185 5.3 ... Zugriff auf die Gerätedateien ... 186 5.4 ... Gerätenamen ... 188 5.5 ... Spezielle Gerätedateien ... 190 5.6 ... Gerätedateien in der Praxis einsetzen ... 191 6. System- und Benutzerdateien ... 227 6.1 ... Die Datei /etc/passwd ... 227 6.2 ... Die Datei /etc/shadow ... 234 6.3 ... Die Datei /etc/group ... 239 6.4 ... uname -- Informationen zum lokalen System erfragen ... 243 6.5 ... Das Verzeichnis /etc/skel und Network Information Service (NIS) ... 245 6.6 ... Dateien für Netzwerkinformationen ... 246 7. Prozesse, Dämonen und Zombies ... 247 7.1 ... Was ist ein Prozess? ... 247 7.2 ... Prozesskomponente ... 248 7.3 ... Prozesse überwachen mit ps, top und kpm ... 258 7.4 ... Der Lebenszyklus eines Prozesses ... 261 7.5 ... Umgebungsvariablen eines Prozesses ... 263 7.6 ... Ressourcenlimits eines Prozesses ... 271 7.7 ... Prozesserkennung ... 275 7.8 ... Erzeugung von neuen Prozessen mit fork() ... 277 7.9 ... Warten auf einen anderen Prozess ... 288 7.10 ... Die exec-Familie ... 296 7.11 ... Kommandoaufrufe aus dem Programm -- system() ... 302 7.12 ... Dämonprozesse ... 304 7.13 ... Mehr über die Ausführung von Prozessen ... 315 7.14 ... Zusammenfassung und Ausblick ... 330 8. Signale ... 331 8.1 ... Grundlagen zu den Signalen ... 331 8.2 ... Das neue Signalkonzept ab Kernel 2.6.18 ... 338 8.3 ... Die Signalmenge initialisieren ... 339 8.4 ... Elemente zu der Signalmenge hinzufügen oder aus ihr entfernen ... 339 8.5 ... Signale einrichten und abfragen ... 340 8.6 ... Signale an andere Prozesse senden mit kill() ... 347 8.7 ... Eine Zeitschaltuhr einrichten mit alarm() ... 348 8.8 ... Prozesse stoppen, bis ein Signal eintritt, mit pause() ... 349 8.9 ... Prozesse für eine bestimmte Zeit stoppen mit sleep() und usleep() ... 349 8.10 ... Die Signalmaske erfragen oder ändern mit sigprocmask() ... 350 8.11 ... Einen Prozess während einer Änderung der Signalmaske stoppen mit sigsuspend() ... 351 8.12 ... Prozesse synchronisieren ... 351 9. IPC -- Interprozesskommunikation ... 355 9.1 ... Unterschiedliche Interprozesskommunikations-Techniken im Überblick ... 356 9.2 ... Gründe für IPC ... 364 9.3 ... Pipes ... 365 9.4 ... System-V-Interprozesskommunikation ... 408 9.5 ... Semaphore ... 410 9.6 ... Message Queues ... 419 9.7 ... Shared Memory ... 432 10. Threads ... 443 10.1 ... Unterschiede zwischen Threads und Prozessen ... 443 10.2 ... Thread-Bibliotheken ... 444 10.3 ... Kernel- und User-Threads ... 445 10.4 ... Scheduling und Zustände von Threads ... 445 10.5 ... Die grundlegenden Funktionen der Thread-Programmierung ... 447 10.6 ... Die Attribute von Threads und das Scheduling ... 459 10.7 ... Threads synchronisieren ... 465 10.8 ... Threads abbrechen (canceln) ... 493 10.9 ... Erzeugen von threadspezifischen Daten (TSD) ... 498 10.10 ... Mit pthread_once() einen Codeabschnitt auf einmal ausführen ... 501 10.11 ... Thread-safe-Funktionen (thread-sichere Funktionen) ... 504 10.12 ... Threads und Signale ... 505 10.13 ... Zusammenfassung und Ausblick ... 510 11. Netzwerkprogrammierung ... 513 11.1 ... Einführung ... 513 11.2 ... Aufbau von Netzwerken ... 514 11.3 ... TCP/IP -- Aufbau und Struktur ... 520 11.4 ... TCP-Socket ... 524 11.5 ... Das Kommunikationsmodell der Sockets ... 525 11.6 ... Grundlegende Funktionen zum Zugriff auf die Socket-Schnittstelle ... 525 11.7 ... Aufbau eines Clientprogramms ... 535 11.8 ... Aufbau des Serverprogramms ... 540 11.9 ... IP-Adressen konvertieren, manipulieren und extrahieren ... 545 11.10 ... Namen und IP-Adressen ineinander umwandeln ... 552 11.11 ... Pufferung bei Netzwerk-Sockets ... 562 11.12 ... Standard-E/A-Funktionen verwenden ... 563 11.13 ... Parallele Server ... 565 11.14 ... Synchrones Multiplexing mit select() ... 582 11.15 ... POSIX-Threads und Netzwerkprogrammierung ... 604 11.16 ... Optionen für Sockets setzen und abfragen ... 610 11.17 ... Das UDP-Protokoll (User Datagram Protocol) ... 615 11.18 ... Unix Domain Sockets ... 624 11.19 ... Multicast-Socket ... 630 11.20 ... Nicht blockierende I/O-Sockets ... 639 11.21 ... Streams, TLI, Raw Socket und XTI ... 642 11.22 ... IPv4 und IPv6 ... 644 11.23 ... Netzwerksoftware nach IPv6 portieren ... 646 11.24 ... Sicherheit und Verschlüsselung ... 647 12. MySQL und PostgreSQL ... 649 12.1 ... Relationale Datenbanksysteme ... 649 12.2 ... Der relationale Datenbankserver ... 653 12.3 ... SQL-Server im Überblick ... 653 12.4 ... Die MySQL-Datenbank ... 654 12.5 ... Die MySQL-C-API ... 684 12.6 ... Beispiel: Ein einfaches Newssystem ... 728 12.7 ... Neue SQL-Funktionen für die Shell -- MySQL erweitern ... 759 12.8 ... MySQL-Funktionen mit der UDF-Schnittstelle entwerfen ... 760 12.9 ... PostgreSQL: Ein objektrelationales Datenbankverwaltungssystem ... 771 13. Terminal-E/A und Benutzerschnittstellen für die Konsole ... 813 13.1 ... termios ... 813 13.2 ... Terminalinformationen in terminfo ... 837 13.3 ... Halbgrafik erstellen mit ncurses ... 847 14. GTK+ ... 891 14.1 ... Was ist GTK+? ... 891 14.2 ... GTK+-Anwendungen übersetzen ... 896 14.3 ... Eine Einführung in die GLib-Bibliothek ... 897 14.4 ... Grundlagen der GTK+-Programmierung ... 923 14.5 ... Fenster anlegen mit GtkWindow ... 935 14.6 ... Anzeigeelemente ... 944 14.7 ... Behälter für Widgets ... 953 14.8 ... Buttons und Toggled-Buttons ... 967 14.9 ... Dateneingaben auswerten ... 977 14.10 ... Menüs und Toolbars erstellen ... 989 14.11 ... Mehrzeiligen Text erstellen ... 1009 14.12 ... Auswählen von Widgets (Selection) ... 1023 14.13 ... Events auswerten ... 1033 14.14 ... Weitere Widget- und GTK+-Elemente im Überblick ... 1039 15. Übersicht über weitere beliebte GUI-Bibliotheken ... 1043 15.1 ... gtkmm -- GTK+ für C++ ... 1043 15.2 ... wxWidgets ... 1047 15.3 ... FLTK ... 1051 15.4 ... Qt ... 1053 15.5 ... Die niedrige Ebene: X-Window-Programmierung ... 1056 15.6 ... Multimediabibliotheken ... 1057 16. Werkzeuge für Programmierer ... 1065 16.1 ... Der Compiler GCC ... 1065 16.2 ... make ... 1074 16.3 ... Eigene Bibliotheken erstellen ... 1091 16.4 ... RPM-Pakete ... 1101 16.5 ... RCS und CVS ... 1114 16.6 ... Laufzeitmessung von Programmen ... 1143 16.7 ... Debuggen mit GDB und DDD ... 1151 16.8 ... STRACE -- Systemaufrufe verfolgen ... 1164 16.9 ... Memory Leaks und unerlaubte Speicherzugriffe ... 1167 16.10 ... Ausblick ... 1175 Anhang ... 1177 A ... Sicherheit unter Linux ... 1179 B ... Funktionsreferenz ... 1201 C ... Linux/UNIX-Kommandoreferenz ... 1283 Index ... 1365

      Systemnahe Programmierung mit C und Linux
    • Grundkurs C

      C-Programmierung verständlich erklärt. Aktuell zum Standard C23. Ideal fürs Studium

      • 496 Seiten
      • 18 Lesestunden

      Die kompakte Einführung in C im praktischen Taschenbuchformat. Das Buch führt Sie übersichtlich in alle Sprachgrundlagen ein, bevor es um fortgeschrittene Themen wie Zeiger oder dynamische Speicherverwaltung geht. Mit dem aktuellen Standard C23, aber auch für ältere Compiler. Viele Codebeispiele und Tabellen sowie eine Funktionsreferenz machen das Buch zu Ihrem nützlichen Begleiter. Zu jedem Kapitel bieten Aufgaben mit kommentierten Lösungen eine Lernkontrolle und laden dazu ein, selbst Hand anzulegen. Ideal als Vorlesungsbegleiter oder zum Auffrischen. Aus dem Inhalt: Erste Schritte in C Verzweigungen und Schleifen Funktionen Präprozessor-Direktiven Arrays und Zeichenketten Zeiger Dynamische Speicherverwaltung Dynamische Datenstrukturen Eingabe- und Ausgabe-Funktionen Aktueller ISO-Standard C23

      Grundkurs C
    • Retro-Spiele programmieren mit dem Raspberry Pi

      Eine Einführung - Mit DVD zum Buch

      Seit einigen Jahren ist das Thema „Retro-Computing“ wieder in, manche sprechen sogar von einem Hype. So sind dann auch die alten Spiele aus den 80-ern immer noch faszinierend, vielleicht, weil sie viel schneller zu verstehen sind, als die modernen 3D-Adventures. Ferner wird immer mehr Kritik laut, die sich vor Allem gegen die sogenannten „Killerspiele“ richtet. Auch deshalb greifen immer mehr Spieler zu Emulatoren der alten Systeme. Dieses Buch ist aber keine Kritik gegen die modernen 3D-Shooter, sondern eine Anleitung, wie man mit einfachen Mitteln Spiele im Retro-Stil selbst erstellen kann. Alles, was man hierzu braucht, ist ein Raspberry Pi, einen USB-Joystick und ein paar Kenntnisse in C oder C++. Weitere Grundkenntnisse enthält dann dieses Buch: - Wie man schnell und effizient Grafiken in der Console ausgibt - Wie man eigene Zeichensätze erstellt und in Spielen verwendet - Wie man Bitmap-Grafiken lädt und auf dem Bildschirm ausgibt - Wie „Double Buffering“ und „Blitting“ funktioniert - Wie man Sprites und Animationen erstellt - Wie man Kollisionen zwischen Objekten erkennt - Wie man flimmerfreies und weiches Scrolling realisiert - Wie man Bitmap-Bilder als Hintergrund verwendet - Wie man Tastatur, Joystick und Maus abfragt - Wie man Sound-Dateien in Spielen verwendet - Natürlich auch, wie man die üblichen „Anfängerfehler“ vermeidet Sämtliche Beispiele und Tools befinden sich auf der beiliegenden DVD, inklusive eines lauffähigen, vorkonfigurierten Linux-Systems für den Raspberry Pi. Nach dem Durcharbeiten zahlreicher Beispiele und Übungen soll der Leser in der Lage sein, in effizienter Weise eigene Ideen umzusetzen oder alte Spiele aus den 80-ern nachzubauen.

      Retro-Spiele programmieren mit dem Raspberry Pi