Zum Hauptinhalt springen
Dekorationsartikel gehören nicht zum Leistungsumfang.
Systemnahe Programmierung mit C und Linux
Das umfassende Handbuch zur Linux-Anwendungsprogrammierung
Buch von Jürgen Wolf (u. a.)
Sprache: Deutsch

59,90 €*

inkl. MwSt.

Versandkostenfrei per Post / DHL

auf Lager, Lieferzeit 1-2 Werktage

Kategorien:
Beschreibung

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 topaktuelle 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

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 topaktuelle 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
Über den Autor
Jürgen Wolf ist seit über 16 Jahren Autor und seit mehr als 10 Jahren passionierter Digitalfotograf. Seine Buchthemen sind Bildbearbeitung, Fotografie, Webentwicklung, Betriebssysteme und Programmierung. Und egal welches Thema: Bei jedem Buch ist es sein Ziel, auch komplexe Zusammenhänge klar und verständlich zu erklären.
Zusammenfassung
Datenbanken, Terminal E/A, Werkzeuge, Sicherheit
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...
Details
Erscheinungsjahr: 2024
Fachbereich: Programmiersprachen
Genre: Informatik
Rubrik: Naturwissenschaften & Technik
Medium: Buch
Reihe: Rheinwerk Computing
Inhalt: 1386 S.
ISBN-13: 9783836297486
ISBN-10: 3836297485
Sprache: Deutsch
Herstellernummer: 459/09748
Einband: Gebunden
Autor: Wolf, Jürgen
Krooß, René
Auflage: 5. Auflage
Hersteller: Rheinwerk Verlag GmbH
Maße: 246 x 204 x 65 mm
Von/Mit: Jürgen Wolf (u. a.)
Erscheinungsdatum: 01.02.2024
Gewicht: 2,298 kg
Artikel-ID: 127725382
Über den Autor
Jürgen Wolf ist seit über 16 Jahren Autor und seit mehr als 10 Jahren passionierter Digitalfotograf. Seine Buchthemen sind Bildbearbeitung, Fotografie, Webentwicklung, Betriebssysteme und Programmierung. Und egal welches Thema: Bei jedem Buch ist es sein Ziel, auch komplexe Zusammenhänge klar und verständlich zu erklären.
Zusammenfassung
Datenbanken, Terminal E/A, Werkzeuge, Sicherheit
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...
Details
Erscheinungsjahr: 2024
Fachbereich: Programmiersprachen
Genre: Informatik
Rubrik: Naturwissenschaften & Technik
Medium: Buch
Reihe: Rheinwerk Computing
Inhalt: 1386 S.
ISBN-13: 9783836297486
ISBN-10: 3836297485
Sprache: Deutsch
Herstellernummer: 459/09748
Einband: Gebunden
Autor: Wolf, Jürgen
Krooß, René
Auflage: 5. Auflage
Hersteller: Rheinwerk Verlag GmbH
Maße: 246 x 204 x 65 mm
Von/Mit: Jürgen Wolf (u. a.)
Erscheinungsdatum: 01.02.2024
Gewicht: 2,298 kg
Artikel-ID: 127725382
Warnhinweis

Ähnliche Produkte

Ähnliche Produkte