Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Programmierung in C/C++
Einige allgemeine Infos zu den Sprachen C/C++ und deren Authoren:
.
Infos zum Kompilieren/Linken sind unter GCC, Make (für die GNU Compiler Collection) und MS Visual Studio (für den Microsoft Compiler) zu finden.
Compatibility of C and C++: https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Siehe auch Empfohlene Parameter (von "ubuntuusers.de").
Tools
Analyse- und Entwickler-Tools:
Unix/Linux | |
---|---|
ar | Libraries modifizieren / anzeigen lassen, etc. |
dump | |
ldd | Abhängigkeiten eines ausführbares Programms / einer (dynamischen) Library anzeigen lassen. |
nm | Inhalt (Symbols) einer Library / Executable anzeigen lassen. |
binscan | Abhängigkeiten eines ausführbares Programms / einer (dynamischen) Library anzeigen lassen, mit GUI. https://sourceforge.net/projects/binscan/ |
ELF Library Viewer (Think of it as a graphical ldd program.) | Abhängigkeiten eines ausführbares Programms / einer (dynamischen) Library anzeigen lassen, mit GUI. http://www.purinchu.net/software/elflibviewer.php |
Windows | |
dumpbin.exe lib.exe | Libraries modifizieren / anzeigen lassen, etc. |
Dependency Walker | Abhängigkeiten in DLLs ermitteln. |
Beyond Compare | Textdateien (Quelltexte) und Ordner vergleichen, um Unterschiede aufzuspüren und abzugleichen. |
Statische Code-Analyse (Info unterhttps://de.wikipedia.org/wiki/Statische_Code-Analyse):
- C - Splint: https://de.wikipedia.org/wiki/Splint_(Software)
- C++ - Cppcheck: https://de.wikipedia.org/wiki/Cppcheck
Dynamische Code-Analyse (Info unterhttps://de.wikipedia.org/wiki/Dynamisches_Software-Testverfahren):
- Valgrind (Memcheck):
Spezielle Themenbereiche
64-Bit-Architektur - Datenmodelle (LLP64/LP64/ILP64/SILP64), Bit-Breite von Integer-Datentypen
ELF - Executable and Linking Format (Unix)
- (VisualStudio) Walkthrough: Creating and Using a Static Library (C++)
https://docs.microsoft.com/de-de/cpp/build/walkthrough-creating-and-using-a-static-library-cpp?view=vs-2019
DLLs / dynamische Libraries / DSOs / shared libraries
- (VisualStudio) Walkthrough: Create and use your own Dynamic Link Library (C++)
https://docs.microsoft.com/de-de/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019
- Google gibt Code zur CPU-Funktionsanalyse frei: http://www.linux-magazin.de/news/google-gibt-code-zur-cpu-funktionsanalyse-frei/
- cpu_features auf Github: https://github.com/google/cpu_features
Sanitizer (deutsch "Desinfektionsmittel"): https://github.com/google/sanitizers - AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer.
Allgemeine Tipps:
Vordefinierte Präprozessor-Direktiven (ANSI C), Makros (Predefined Macros) und String-Literal-Operator
Big-Endian und Little-Endian, Unbedingt beachten: Plattformübergreifende Darstellung von Zahlen (insbesondere bei der seriellen Übertragung)
Makros-Kollisionen vermeiden
Plattform-Makros für Plattform- und Compilerübergreifende Programme (Stichwort: Portabilität) ()
Einbetten von Versionsinformationen ()
Signale (nur UNIX/Linux)
Dynamische Speicherverwaltung - malloc(), calloc(), realloc(), free(), alloca(); Hinweise für Portierung von 32- auf 64-Bit (32-/64-Bit Pointer).
Zugriff auf das FileSystem - stat(), rename(), remove(), chmod(), access(), utime(), getcwd(), mkdir(), rmdir(), chdir(), realpath(), dirname() und basename(), opendir(), readdir() und readdir_r(), closedir(), etc. ()
errno - Es gibt einiges zu beachten!
Zeit-Funktionen - time(), localtime(), localtime_s(), localtime_r(), clock(), clock_gettime(), TZ, etc. und weitere Beispiele ()
Funktionen mit variabler Anzahl von Parameter ()
Vorsicht bei Verwendung von putenv() - es kann zu memory leaks führen! Stattdessen die setenv() verwenden.
Warum, wird hier ausführlich erklärt: http://stackoverflow.com/questions/5873029/questions-about-putenv-and-setenv
…oder auch hier: http://www.greenend.org.uk/rjk/tech/putenv.html
Kurzanleitung für Debugger DDD / KDbg
backslash2slash.sh Ein kurzes Skript für die Portierung auf Unix - ersetzt alle Back-Slashes in den "#include"-Direktiven (.c- und .h-Files) durch Slashes.
Sichere Programmierung - Hier findet man ebenfalls einige nützliche Hinweise.
Extern linkage und C language linkage
Das Schlüsselwort explicit (Seit C++11) verhindert implizite Typumwandlungen (beim Constructor)
Funktionen, die ausschließlich innerhalb eines Modules verwendet werden, sollen mit dem Schlusselwort static deklariert werden. Das schränkt die Sichtbarkeit solcher Funktionen auf das jeweilige Modul (sprich auf ein ".c"-File). Es beugt den evtl. Namenskonflikten vor, wenn z.B. mehrere Module für ihre Funktionen gleiche Namen verwenden.
Datentypen
Datentype für Zeichen und Strings - char, wchar_t, char16_t, char32_t, u16string, u32string
printf() - Formatierungszeichen (Formatzeichen, Steuerzeichen, Escape-Sequenzen)
Definition von neuen Datentypen (mit "typedef", "#define", Probleme bei anonymen Typen, etc.)
GMP - The GNU Multiple Precision Arithmetic Library: https://de.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library
- Offizielle GMP Website: https://gmplib.org/
GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on. - Anwendungsbeispiel:
Computing billions of π digits using GMP: https://gmplib.org/pi-with-gmp.html
Programmbeispiele in C:
C lernen - Einige Beispiele und Übungen. ()
Die meisten Beispiele sind vereinfacht dargestellt. Sie sollen nicht als konkrete und fertige Lösungen verstanden werden, sondern vielmehr als Lösungsansätze, die zu einer Lösung in jeweiligen konkreten Fällen führen.
Zeitabstände messen bzw. Laufzeit eines Programms / einer Funktion berechnen
Kommunikation über Named Pipes
Textfile öffnen - mit Versuchszähler, Basisfunktion: fopen()
Textfile schließen/löschen - mit Versuchszähler
Aus mehreren Files blockweise lesen, Basisfunktion: fread()
logging_ext: Logging-Modul - nützliche Log-Funktionen ()
trim_ext: Trim-Modul - Funktionen um die Leerzeichen vorne und hinten bei einem String wegschneiden
Array of Messages: Alle Messages, die ein Programm ausgibt, an einer Stelle zusammen halten
Zweidimensionale dynamische Arrays
Vorlage C-Programm: Ein Gerüst für ein C-Programm
Debug-Makros - Einige nützliche Beispiele, die sich beim "Debuggen" als hilfreich erwiesen haben
Environment lesen - Verschiedene Wege, die Environment-Variablen zu lesen
Parsing Program Arguments: http://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments (getopt / argp_parse / suboptions)
get_CurrentExecutable() - Filename des gerade ausgeführten Moduls herausfinden
uname() - get name and information about current kernel: http://man7.org/linux/man-pages/man2/uname.2.html
- Zeichenweise lesen aus stdin mit getchar() (und schreiben auf "stdout" mit "putchar()") und ein etwas portableres getch():
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_006.htm#t2t32 - Zeichenweise lesen dateiorientiert mit getc() bzw. fgetc() (und schreiben mit "putc()" bzw. "fputc()"):
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_007.htm - Zeilenweise lesen mit gets() bzw. fgets() (und schreiben mit "puts()" bzw. "fputs()"):
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_016.htm#t2t32 - Zeilenweise einlesen vom Stream mit getline() (nicht ANSI C):
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_016.htm#t2t34 - Ncurses (C-Bibliothek für die Steuerung von Textterminals): https://de.wikibooks.org/wiki/Ncurses
- Ncurses-Doku als PDF: https://upload.wikimedia.org/wikibooks/de/b/b3/Ncurses.pdf
Programmbeispiele in C++:
C++ Crashkurs - Einige Beispiele / Übungen.
static_assert() (C++11)
Auf der Kommandozeile übergebene Parameter parsen
Stringutils - Helper rund um die Strings (trim, trim_left, trim_right, pad_left, pad_right, to_upper, replace, compare_nocase, split, split_lines)
"Spontan" auf eine dynamische Library zugreifen
Zeit in C++20: Kalendertermine erstellen: https://www.heise.de/blog/Zeit-in-C-20-Kalendertermine-erstellen-9671530.html?wt_mc=nl.red.ho.ho-nl-newsticker.2024-04-09.link.link
(Der Artikel taucht tiefer in das Konzept von Kalenderdaten in C++ ein und zeigt, wie man sie erstellt.)
Vorsicht bei der Zuweisung eines Objekts an Static Member einer Klasse! (Relevant für den GNU-Compiler)
Vorsicht bei der Initialisierung eines Objekts bei dessen Deklaration! (Relevant für den GNU-Compiler)
Export von Klassen/Strukturen/Methoden/Funktionen, die STL-Objekte (oder Templates allgemein) als Member/Parameter verwenden (insbesondere für DLLs relevant)
Size of array:
- How to get the size of an Array? http://stackoverflow.com/questions/874169/how-to-get-the-size-of-an-array
Achtung! Das Schlüsselwort abstract (um virtuelle Methoden als abstrakte Methoden zu gekennzeichnen) kann zwar in MS VisualStudio verwendet werden, ist jedoch nicht Bestandteil von C++! Stattdessen, insbesondere für den portablen Code, die C++ Notation verwenden:
virtual type_of_method pure_virtual() = 0;
Hier ist die Info auf MSDN:
- Component Extensions for Runtime Platforms (englisch)
- abstract (C++ Component Extensions) (englisch)
…und auf http://www.programmerinterview.com/:
- Does C++ have a keyword for "abstract"? (englisch)
- What is a pure virtual function? (englisch)
Die xxxxxx_s()-Funktionen nachbauen - memcpy_s(), strcpy_s(), strncpy_s()
Externe Links zum Thema:
Linux C++ Software Development: http://www.yolinux.com/TUTORIALS/LinuxTutorialC++.html - Links to Linux C++ GUI frameworks, APIs, IDEs, as well as C++ tips for Linux developers.
http://www.willemer.de/informatik/unix/unprfork.htm - Arnold Willemer: Programmierung UNIX-Prozesse
http://pronix.linuxdelta.de/C/Linuxprogrammierung/index.shtml - Jürgen Wolf: Linux/Unix-Systemprogrammierung
http://www.minet.uni-jena.de/dbis/lehre/ws2006/c-c++/slides6.pdf - Knut Stolze: Systemnahe Programmierung in C/C++ - Interprozesskommunikation (IPC) -
http://www.fbi.h-da.de/~a.schuette/Vorlesungen/Unix/Skript/C-Programmierung/Interprozesskommunikation.pdf - Prof. Dr. Alois Schütte: Unix für Entwickler: Interprozesskommunikation
http://www2.fh-fulda.de/~gross/parallel.bachelor/kap2.pdf - Prof. Dr. S.Groß: Parallelverarbeitung
Unix domain socket:
in Wikipedia (englisch), Wikipedia (deutsch), und unter http://www.netzmafia.de/skripten/server/ThomasSocket2.pdf
Artikel zu C und C++: http://www.kompf.de/cplus/artikel/index.html
Linux System Call Table (eine Tabelle mit den Linux-Syscalls für 64-Bit-Systeme): http://thevivekpandey.github.io/posts/2017-09-25-linux-system-calls.html
(Code hosted at https://github.com/thevivekpandey/syscalls-table-64bit)
C
http://pronix.linuxdelta.de/C/standard_C/index.shtml - Jürgen Wolf: C von A bis Z (Online-Version des Buches)
http://www2.fh-fulda.de/~klingebiel/c-stdlib/ - Axel Stutz, Peter Klingebiel, FH Fulda, DVZ: Übersicht über die C Standard-Bibliothek (<assert.h>, <float.h>, <math.h>, <stdarg.h>, <stdlib.h>, <ctype.h>, <limits.h>, <setjmp.h>, <string.h>, <signal.h>, <stdio.h>, <time.h>)
C++
C++ Standards Support in GCC (Welche C++ Eigenschaften ab welchen GCC Versionen verfügbar sind):
https://gcc.gnu.org/projects/cxx-status.html
C++11:
- C11: Neue Version der Programmiersprache (2012)
http://www.cplusplus.com/ - Umfangreiche Sammlung von Tutorials, C++Referenzen und Artikeln. Ein Forum ist auch dabei (englisch).
C++Reference: http://www.cplusplus.com/reference/
Hier einzeln:
http://ladedu.com/cpp/ - Heinz Tschabitscher: Einführung in C++-Programmierung
Generische Programmierung (Templates): http://www.willemer.de/informatik/cpp/cpptempl.htm
Modernes C++ in der Praxis (von Rainer Grimm):
- Folge 1: http://www.linux-magazin.de/Ausgaben/2011/12/C-11/ - Die Elf spielt auf
- Folge 2: http://www.linux-magazin.de/Ausgaben/2012/02/C-11/ - Lambda-Funktionen
- Folge 3: http://www.linux-magazin.de/Ausgaben/2012/04/C-11/ - Mehrgleisig unterwegs (Multithreading-Fähigkeit)
- Folge 4: http://www.linux-magazin.de/Ausgaben/2012/06/C-11/ - Gemeinsam ins Ziel (mehrere Threads)
- Folge 5: http://www.linux-magazin.de/Ausgaben/2012/08/C-11/ - Im Gleichtakt (Synchronisieren von Threads)
- Folge 6: http://www.linux-magazin.de/Ausgaben/2012/10/C-11/ - Alle im Einklang (Promise und Future - Synchronisation mehrerer Threads)
- Folge 7: http://www.linux-magazin.de/Ausgaben/2012/12/C-11/ - Rasch verschoben
- Folge 8: http://www.linux-magazin.de/Ausgaben/2013/02/C-11/ - Räumkommando (Unique Pointer)
- Folge 9: http://www.linux-magazin.de/Ausgaben/2013/04/C-11/ - Klug aufgeräumt (Smart Pointer)
- Folge 10: http://www.linux-magazin.de/Ausgaben/2013/06/C-11/ - Zähl mich! (reguläre Ausdrücke)
- Folge 11: http://www.linux-magazin.de/Ausgaben/2013/08/C-11/ - Starke Ausdrücke (reguläre Ausdrücke)
- Folge 12: http://www.linux-magazin.de/Ausgaben/2013/10/C-11/ - Suchen und ersetzen (reguläre Ausdrücke)
- Folge 13: http://www.linux-magazin.de/Ausgaben/2013/12/C-11/ - Geschwindigkeit zählt (Hashtabellen)
- Folge 14: http://www.linux-magazin.de/Ausgaben/2014/02/C-11/ - Neue Ausdruckskraft (Range-basierte For-Schleife)
- Folge 15: http://www.linux-magazin.de/Ausgaben/2014/04/C-11/ - C++11 + 3 = C++14
- Folge 16: http://www.linux-magazin.de/Ausgaben/2014/06/C-11/ - Der Vertrag (Memory-Modell, atomare Variablen)
- Folge 17: http://www.linux-magazin.de/Ausgaben/2014/08/C-11/ - Automatik mit Methode
- Folge 18: http://www.linux-magazin.de/Ausgaben/2014/10/C-11/ - Schönes Objekt
- Folge 19: http://www.linux-magazin.de/Ausgaben/2014/12/C-11/ - Kurs zum Mars (neue Literale: Raw-String- und benutzerdefinierte Literale)
- Folge 20: http://www.linux-magazin.de/Ausgaben/2015/02/C-11/ - Statisch geprüft (static_assert() und die Type-Traits-Bibliothek)
- Folge 21: http://www.linux-magazin.de/Ausgaben/2015/04/C-11/ - Für vorsichtige Raser (Type-Traits-Bibliothek)
- Folge 22: http://www.linux-magazin.de/Ausgaben/2015/06/C-11/ - Konstante Magie ("constexpr")
- Folge 23: http://www.linux-magazin.de/Ausgaben/2015/08/C-11/ - Punktlandung (Variadic Templates)
- Folge 24: http://www.linux-magazin.de/Ausgaben/2015/10/C-11/ - Containerverwaltung
- Folge 25: http://www.linux-magazin.de/Ausgaben/2015/12/C-11/ - Der Reihe nach verpackt (Containern)
- Folge 26: http://www.linux-magazin.de/Ausgaben/2016/02/C-11/ - Doppelte Packung (die Referenz-Wrapper)
- Folge 27: http://www.linux-magazin.de/Ausgaben/2016/04/C-11/ - Die Zeit verstehen (Zeitbibliothek)
- Folge 28: http://www.linux-magazin.de/Ausgaben/2016/06/C-11/ - Pünktlich verschlafen (Zeitbibliothek)
- Folge 29: http://www.linux-magazin.de/Ausgaben/2016/08/C/ - Zukunftsmusik
- Folge 30: http://www.linux-magazin.de/Ausgaben/2016/10/C/ - Bibliotheks-Karriere
- Folge 31: http://www.linux-magazin.de/Ausgaben/2016/12/C/ - Von der Theorie zur Praxis
- Folge 32: http://www.linux-magazin.de/Ausgaben/2017/02/C/ - Delinquente Typen
- Folge 33: http://www.linux-magazin.de/Ausgaben/2017/04/C/ - Programmiere deklarativ
- Folge 34: http://www.linux-magazin.de/Ausgaben/2017/06/C/ - Selbstoptimiert (Move-Semantik und konstanten Ausdrücken)
- Folge 35: http://www.linux-magazin.de/Ausgaben/2017/08/C/ - Compiler first!
- Folge 36: http://www.linux-magazin.de/Ausgaben/2017/10/C - Crash nach Flash
- Folge 37: http://www.linux-magazin.de/Ausgaben/2017/12/C - Kein Verlass
- Folge 38: http://www.linux-magazin.de/ausgaben/2018/02/c/ - (über Lesbarkeit von Code)
- Folge 39: http://www.linux-magazin.de/ausgaben/2018/04/c/ - (über "static_assert")
- Folge 40: http://www.linux-magazin.de/ausgaben/2018/06/c-2/ - Kenne deine Bibliotheken
- Folge 41: http://www.linux-magazin.de/ausgaben/2018/08/c-3/ - Strebe nach Einfachheit
Blog Modernes C++ von Rainer Grimm auf Heise: https://www.heise.de/developer/ModernesCplusplus-3691794.html
Boost (C++-Bibliothek) - Eine freie C++-Bibliothek, die aus einer Vielzahl von portablen Unterbibliotheken besteht.
Online-Buch Die Boost C++ Bibliotheken (deutsch): http://www.highscore.de/cpp/boost/
http://msdn.microsoft.com/en-us/library/hh279654(v=vs.110).aspx - MSDN: Welcome Back to C++ (Modern C++)
http://www.angelikalanger.com/Articles/Topics.html#CPP - Angelika Langer: C++ Articles (in verschiedenen Sprachen)
Programmieren mit C++ Templates
Fehlerfreies Programmieren in C++ - Dynamische Allokation von Ressourcen
In der Klasse "std::string" fehlt die trim-Funktion. Im Thread What's the best way to trim std::string auf http://stackoverflow.com/ wird über verschiedene Lösungsansätze diskutiert.
Performance Unterschied von std::vector und std::list: http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html
static_cast, const_cast, dynamic_cast, reinterpret_cast und C-Casts: https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_N%C3%BCtzliches/_Casts
Herb Sutter - Elements of Modern C++ Style: http://herbsutter.com/elements-of-modern-c-style/ - Neuerungen in C++11 gegenüber C++98.
C++/11: Eine Einführung in Lambda Funktionen: http://www.indiedev.de/wiki/C%2B%2B/11:_Eine_Einf%C3%BChrung_in_Lambda_Funktionen
MSDN: Lambda-Ausdrücke in C++: http://msdn.microsoft.com/de-de/library/dd293608.aspx
UnitTests (Microsoft.VisualStudio.TestTools.CppUnitTestFramework): http://jk-wiki.kreick.de/doku.php?id=edv:prg:ide:msvisualstudio#unittest
SEH (Structured Exception Handling): https://msdn.microsoft.com/de-de/library/swezty51(v=vs.120).aspx
libstdc++ Source Documentation: https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/
- std Namespace Reference: https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01616.html
Warum using ein besserer typedef ist? Hier ist die Antwort: https://stackoverflow.com/questions/10747810/what-is-the-difference-between-typedef-and-using-in-c11
(The using syntax has an advantage when used within templates.)
Entwurfsmuster Singleton Pattern: https://cplusplus-development.de/c/cplusplus-erweitert/entwurfsmuster-singleton-pattern
UTF8
Unicode in C and C++: What You Can Do About It Today (englisch) von : Alex Allain
Using Unicode in C/C++ (englisch) von : Evan Jones
Eine hilfreiche Tabelle mit Unicode-/UTF8-Zeichen: http://www.utf8-zeichentabelle.de/
Weitere Tabelle: http://www.isthisthingon.org/unicode/index.php
Shared Memory
Filesystem
ADMIN-Tipp: Dateiänderungen überwachen von Oliver Frommel
Die Inotify-Schnittstelle des Linux-Kernels erlaubt es, Dateien und Verzeichnisse im Blick zu behalten. Mit der Python-API lassen sich dafür eigene Skripte schreiben.
Resource-Files (nur Windows)
MinGW:
- MS resource compiler: http://www.mingw.org/wiki/MS_resource_compiler
Auf MSDN:
- VERSIONINFO resource: https://msdn.microsoft.com/en-us/library/windows/desktop/aa381058(v=vs.85).aspx
- Using RC (The RC Command Line): https://msdn.microsoft.com/en-us/library/windows/desktop/aa381055(v=vs.85).aspx
Verschlüsselung
mit OpenSSL
Oliver Müller auf "Heise Developer":
OpenSSL: Implementierung innerhalb eines Client- und Server-Programms (2010)
mit Boost.Asio
Oliver Müller auf "Heise Developer":
SSL/TLS-Netzwerkprogrammierung mit Boost.Asio (2016)
- Teil 1, Grundlagen (Auftrieb):
http://www.heise.de/developer/artikel/SSL-TLS-Netzwerkprogrammierung-mit-Boost-Asio-Teil-1-Grundlagen-3081443.html - Teil 2, Server-Programmierung (Praktischer Auftrieb für SSL):
http://www.heise.de/developer/artikel/SSL-TLS-Netzwerkprogrammierung-mit-Boost-Asio-Teil-2-Server-Programmierung-3102667.html - Teil 3, Client-Programmierung und Fehlerbehandlung (Portabler Auftrieb):
http://www.heise.de/developer/artikel/SSL-TLS-Netzwerkprogrammierung-mit-Boost-Asio-Teil-3-Client-Programmierung-und-Fehlerbehandlung-3161904.html
Netzwerk
cURL (Client for URLs): https://de.wikipedia.org/wiki/CURL - ein Kommandozeilen-Programm zum Übertragen von Dateien in Netzwerken.
(cURL bzw. libcurl kann auch als Ersatz bzw. Nachfolger für libwww betrachtet werden.)
- curl - command line tool and library: https://curl.haxx.se/
- libcurl - the multiprotocol file transfer library: https://curl.haxx.se/libcurl/
- libcurl - small example snippets: https://curl.haxx.se/libcurl/c/example.html
- libcurl - programming tutorial: https://curl.haxx.se/libcurl/c/libcurl-tutorial.html
libwww (Library World Wide Web): https://en.wikipedia.org/wiki/Libwww - modulares client-seitiges Web-API für Unix und Windows.
(Sehr veraltet, letzter Release 12.2006.)
- Libwww Architecture: https://www.w3.org/Library/User/Architecture/Overview.html
- Libwww Ready to go Samples: https://www.w3.org/Library/Examples/
Threads
Das Abarbeiten mehrerer Threads innerhalb eines Prozesses wurde mit dem C++11-Standard eingeführt.
Client-Server mit Threads ( ToDo)
Eine Einführung in die Programmierung von Threads unter Linux: http://www.ijon.de/comp/tutorials/threads/index.html von Michael Becker (2001)
Beim Kompilieren (mit GCC) den Schalter "-pthread" nicht vergessen! Dieser Schalter aktiviert ein (oder mehrere?) Define (zumindest "_GLIBCXX_HAS_GTHREADS"), damit der Compiler in den Header-Files in passende Zweige hinein läuft.
Parallele Programmierung - PThread (POSIX-Threads), OpenMP (Open Multi Processing), MPI (Message Passing Interface):
https://pc2.uni-paderborn.de/fileadmin/pc2/media/staffweb/Jens_Simon/Courses/WS08_APR/ParalleleProgrammierung.pdf
Jürgen Wolf, C von A bis Z - Das umfassende Handbuch: Kapitel "26.4 Mit den POSIX-Threads programmieren"
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/026_c_paralleles_rechnen_004.htm
"Windows Threads vs pthreads" (meine Übersetzung aus https://stackoverflow.com/questions/5644912/posix-threads-vs-win32-threads):
Interface-mäßig unterscheiden sich die beiden Thread-Arten wenig. Sie könnte man fast 1:1 mappen. (Stichwort: "pthreads-win32".) Das wärs aber.
Die Posix-Threads sind alle Calls der Library "pthreads", die wiederum (auf Unix/Linux-Systemen) LowLevel-System-Calls tätigen. Die Win32-Threads sind System-Calls.
Ein sehr ausführlicher Artikel zum Thema (Stand: 31.03.2006):
https://www.uni-kassel.de/eecs/fileadmin/datas/fb16/Fachgebiete/PLM/Dokumente/Master_Bachelor_Diplom/tobias_gunkel_threading_systems.pdf
Synchronisation von Threads: https://www.grimm-jaud.de/index.php/blog/bedingungsvariablen-versus-tasks-zur-synchronisation-von-threads
C++ Keyword thread_local (ab C++11): https://en.cppreference.com/w/cpp/keyword/thread_local
Lesenswerte Artikel zum Thema aus dem Blog von Rainer Grimm auf Heise:
- 23.04.2018: Regeln zur Concurrency und zur Parallelität
- 30.04.2018: Mehr Regeln zur Concurrency und zur Parallelität
- 14.05.2018: Teilen von Daten zwischen Threads
- 21.05.2018: Sich um Kinder-Threads kümmern
- 28.05.2018: Mehr Fallen in der Concurrency
- 25.06.2018: Concurrency und lock-freies Programmieren
Sonstiges
JSON-Parser: Library "jsoncpp" - https://github.com/open-source-parsers/jsoncpp
Stand: 01.11.2021
EOF