Hallo,
irgendjemand von Euch weiß doch bestimmt, wie man CGI-Programme in C/C++ schreibt? Es wäre jedenfalls wahnsinnig nett, wenn mir jemand verraten könnte, was ich hier falsch gemacht habe oder was ich noch machen muß, damit es funzt.
folgender simpler Quellcode sollte einfach zu einer entsprechenden Anzeige im WebBrowser führen:
[...]
mit dem gcc kompiliert...:
gcc -o webcgi webcgi.c
Da fehlen noch die Warnungen und Optimieren wäre auch nicht schlecht (Darüber streiten sich die Geister. Diese Geister kommen dann aber meist aus der Asssembler Gruft oder der abusing-C Krypta ;-)
Mit den o.a. Flags:
gcc -O2 -W -Wall -pedantic -ansi -o webcgi webcgi.c
... und nach /usr/local/httpd/cgi-bin kopiert:
cp webcgi /usr/local/httpd/cgi-bin
Evt müssen da noch die Rechte zurechtgestutzt werden.
Dann im Webbrowser eingegeben: "http://127.0.0.1/cgi-bin/webcgi"
Leider kam dann nicht das erhoffte "Hallo Welt!", sondern eine Meldung über einen internal Server Error.
Ja, der Apache (welcher überhaupt?) ist mitunter recht maulfaul ;-)
Weiß jemand, was ich da falsch gemacht habe? Oder muß ich am Apache noch was konfigurieren? Oder brauche ich ein bestimmtes Modul dazu?
Nein, normalerweise nichts. Nur das cgi-bin muß eingeschaltet sein (httpd.conf)
Bin für alle Anregungen dankbar, vor allem auch für Webseiten zu diesem Thema.
Da gibt es viel zu viele, als das man da eine Empfehlung aussprechen könnte.
Ein gemütlicher Abend mit Google dürfte da erfolgreich sein.
PS: Ziel ist eine Applikation, die auf ein bereits bestehendes Framework von C++ - Klassen zurückgreift und einen Webbrowser als Oberfläche nutzt, um in einer Applikation die Fähigkeiten lokal und remote anzubieten,
Da würde ich dann doch eher ein "richtiges" Modul empfehlen.
Allerdings ist es im Grunde genommen recht einfach. Statt der normalen Ausgabe ist halt noch der HTTP Header erforderlich, wie Frank schon so trefflich ausführte. Es sollte kein Problem sein, sich ein eigenes webprintf() zu basteln, das das tut.
BTW: als Zeilenende gilt im HTTP "\r\n". Bitte merken. Den meisten Browsern ist das zwar egal, aber im Header ist es wichtig und wird leicht übersehen. (Passiert mir auch oft genug ;-)
wobei lokal ein Linux-Rechner und remote meist ein Windows-Rechner ist.
Das sollte nun gar keine Rolle spielen.
Zumindest auf der Clientseite nicht.
SCNR ;-)
so short
Christoph Zurnieden
--
/*in memoriam*/
#define goto harmfull