HTMC ist ein Tool, mit dem Sie C -Code einfach in Ihre HTML -Seiten integrieren und umgekehrt. Dateien, die in .htmc enden, können verwendet werden, um die Struktur einer Seite in HTML und dynamisch in C zu beschreiben, ähnlich wie andere Hypertex -Präprozessoren wie PHP. Reguläre C -Quelldateien können auch mit HTMC kompiliert und voll dynamische Webseiten generiert werden.
HTMC verwendet GCC und den GNU -Linker, um hochoptimierte native Binärdateien zu generieren, die zwischengespeichert und über HTMC auf Demande ausgeführt werden können. Theoretisch ermöglicht dies eine viel schnellere Ausführung* im Vergleich zu vielen gemeinsamen interpretierten Sprachen wie PHP, Python und JavaScript.
Das Schreiben von Webcode in C kann auch eine unterhaltsame Herausforderung oder akademische Übung sein. Bei genügend Basteln können Sie HTMC dazu bringen, alles zu tun, was Sie auf einer dynamischen Webseite oder einem HTTP -API -Endpunkt benötigen.
* Die Leistung des durch HTMC ausgeführten Codes wurde noch nicht getestet. Die wichtigsten Optimierungen müssen auch noch implementiert werden, da sie streng von HTMC einen eigenen Webserver integrieren müssen.
HTMC ist für die Unterstützung mehrerer Usecasen erstellt. Ab sofort kann HTMC verwendet werden:
include -Verzeichnis und libhtmc.a )Der empfohlene Modus zum Servieren von Webinhalten ist CGI, da er eine einfache Integration in die vorhandene Websoftware ermöglicht.
CGI ist bekannt als alt und langsam, weshalb HTMC irgendwann einen eigenen Webserver erhält. Der integrierte Webserver verwendet preallozierte Arenen, Speicher- und Netzwerkoptimierungen, um die Ausführungsgeschwindigkeit zu maximieren und den Overhead hoffentlich zu minimieren.
Hinweis: Der Ersatz von GCC oder GNU -Linker durch andere Software wird ab sofort nicht gefördert. Einige von HTMC angegebene Befehlszeilenoptionen können in anderen Compilern/Lindern unterschiedlich sein.
libhtmc enthält alle HTMC -Funktionen. Die Bibliothek kann in anderen nativen Programmen zur Integration von HTMC verwendet werden, enthält jedoch auch eine Schnittstelle zur Interaktion mit der HTMC -Laufzeit und zur Manipulation von HTML -Code
| Funktionsschnittstelle | Beschreibung |
|---|---|
void htmc_bind(htmc_handover_t *handover) | Bindet einen htmc_handover_t -Zeiger an die aktuelle HTMC -Ausführungseinheit |
int htmc_printf(const char *fmt, ...) | Schreibt eine formatierte Zeichenfolge auf die HTML -Seite |
int htmc_vpprintf(const char *fmt, va_list args) | Schreibt eine formatierte Zeichenfolge auf die HTML -Seite |
int htmc_puts(const cahr *s) | Schreiben Sie eine Klage auf der HTML-Seite (schneller als htmc_printf ) eine Klagestufe. |
int htmc_query_scanf(const char *fmt, ...) | Liest Werte aus HTTP -Abfrageargumenten |
int htmc_query_vscanf(const char *fmt, va_list args) | Liest Werte aus HTTP -Abfrageargumenten |
int htmc_form_scanf(const char *fmt, ...) | Liest Werte aus HTTP -Körperargumenten in Postanfragen |
int htmc_form_vscanf(const char *fmt, va_list args) | Liest Werte aus HTTP -Körperargumenten in Postanfragen |
int htmc_error(const char *fmt, ...) | Wirft eine formatierte Fehlermeldung aus |
void *htmc_alloc(size_t size) | Gibt ein void * an einen Speicherpuffer der angeforderten Größe oder NULL zurück, wenn es fehlschlägt |
void htmc_free(void *ptr) | Frei gibt einen mit htmc_alloc zugewiesenen Speicherpuffer |
Der einfachste Weg, HTMC zu verwenden, besteht darin, einen einfachen CGI -Webserver in einer hochstufigen Sprache zu erstellen und bei der Bearbeitung von Anforderungen HTMC aufzurufen. In diesem Beispiel wird Golang als eine der einfachsten Muttersprachen verwendet, die diese Merkmale außerhalb der Box unterstützt. Ein Golang -Webserver ist in diesem Repository enthalten.
htmc-cgi-ws für Linux von hier aushtmc-cgi-ws in ihnhtmc-cgi-ws als ausführbare Datei erkannt wird chmod +x ./htmc-cgi-ws
htmc-cgi-ws als Super-Benutzer aus (falls erforderlich) und befolgen Sie die Anweisungen auf dem Bildschirm [alevm@alevm ws]$ sudo ./htmc-cgi-ws
You're missing some important htmc files, proceed with the download? [Y/n]: Y
Downloading <https://alessandro-salerno.github.io/htmc/bin/htmc> to ./bin/htmc ... Done!
Downloading <https://alessandro-salerno.github.io/htmc/bin/libhtmc.a> to ./bin/libhtmc.a ... Done!
Downloading <https://alessandro-salerno.github.io/htmc/include/libhtmc/libhtmc.h> to ./include/libhtmc/libhtmc.h ... Done!
Downloading <https://alessandro-salerno.github.io/htmc/examples/index.htmc> to ./index.htmc ... Done!
Listening on localhost:80
localhost/index.htmc verfügbar sein Compiling for linux
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/cli.c -o obj/common/cli.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/compile.c -o obj/common/compile.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/emit.c -o obj/common/emit.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/libhtmc/impl/base-impl.c -o obj/common/libhtmc/impl/base-impl.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/libhtmc/impl/debug-impl.c -o obj/common/libhtmc/impl/debug-impl.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/libhtmc/libhtmc.c -o obj/common/libhtmc/libhtmc.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/load.c -o obj/common/load.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/log.c -o obj/common/log.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/main.c -o obj/common/main.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/parse.c -o obj/common/parse.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/util.c -o obj/common/util.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/cli.c -o lib/common/cli.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/compile.c -o lib/common/compile.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/emit.c -o lib/common/emit.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/libhtmc/impl/base-impl.c -o lib/common/libhtmc/impl/base-impl.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/libhtmc/impl/debug-impl.c -o lib/common/libhtmc/impl/debug-impl.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/libhtmc/libhtmc.c -o lib/common/libhtmc/libhtmc.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/load.c -o lib/common/load.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/log.c -o lib/common/log.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/main.c -o lib/common/main.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/parse.c -o lib/common/parse.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/util.c -o lib/common/util.o
gcc -flto obj/common/cli.o obj/common/compile.o obj/common/emit.o obj/common/libhtmc/impl/base-impl.o obj/common/libhtmc/impl/debug-impl.o obj/common/libhtmc/libhtmc.o obj/common/load.o obj/common/log.o obj/common/main.o obj/common/parse.o obj/common/util.o -o bin/htmc
ar rcs bin/libhtmc.a lib/common/cli.o lib/common/compile.o lib/common/emit.o lib/common/libhtmc/impl/base-impl.o lib/common/libhtmc/impl/debug-impl.o lib/common/libhtmc/libhtmc.o lib/common/load.o lib/common/log.o lib/common/main.o lib/common/parse.o lib/common/util.o
cd cgi-ws && go build -o ../bin/htmc-cgi-ws
Finished!
alessandrosalerno@MacBook-Pro-di-Alessandro-3 htmc %
git clone https://github.com/Alessandro-Salerno/htmc
cd htmc/
make
Hinweis: Das Standard -Ziel ist all . Alternative Ziele machen:
make htmc # Build ONLY the executable
make libhtmc # Build ONLY the library
make htmc-cgi-ws # Build ONLY the CGI Web Server
HTMC wird nach den Bedingungen der MIT -Lizenz verteilt. Weitere Informationen finden Sie unter Lizenz.
Dieses Projekt wurde ursprünglich von PKD667/CWEB inspiriert.