Tutorial : CGI-Programmierung in C
      
Shopsoftware Shopsystem
  Home     Download     News     Kontakt     Impressum     Sitemap  

Demo-Version   
Häufige Fragen   
Module und Preise   
Wie bestellen   
Support   
AnfrageAnfrage   
TutorialsTutorials
Partnerprogramm   
Über interaktiv.net   
Leistungen   
Referenzen   
Sie sind hier  :  Startseite Support Tutorials
CGI-Programmierung in C


Sinn und Zweck dieses Artikels
Der C Compiler, Download und Installation
Das erste C Programm
Das erste CGI in C geschrieben
Die CGIC Library von Thomas Boutell
Variablen der CGI Umgebung anzeigen



Sinn und Zweck dieses Artikels

Diese kleine Einführung wendet sich an denjenigen der CGIs in der Programmiersprache C schreiben möchte.

Der wesentliche Unterschied zu einem CGI welches beispielsweise in PERL geschrieben ist besteht darin dass ein CGI als C Programm eine ausführbare Datei darstellt wohingegen ein CGI als PERL Script zur Laufzeit vom PERL Interpreter interpretiert wird.

Das hat natürlich einige Konsequenzen, hier die Wichtigsten:

  • Der Webserver muss das unterstützen,
  • die ausführbare Datei ist nicht mehr plattformunabhängig,
  • es wird ein Compiler benötigt um die Datei (Win9x: .exe) zu erzeugen,
  • Änderungen im Quellcode erfordern eine erneute Compilierung.

Der vorliegende Artikel beschreibt das Einrichten des C Compilers in einer Windows Umgebung und die ersten Schritte zum Erzeugen eines CGIs in C.

Der C Compiler, Download und Installation

Nicht ganz trivial sind diese beiden Dinge denn ein Setup Programm gibt es nicht. Und damit das Konto Lehrgeld infolge langer Onlinekosten nicht unnötig belastet wird, sei hier eine kleine Anleitung dazu gegeben.

Ein ANSI C Compiler steht auch für Win9x/NTals freie Software zur Verfügung. Zum Download des Compilers am Besten die Seite ZIP Picker aufsuchen und die entsprechenden Angaben machen. Dieser Assistent unterstützt Sie also bei der Auswahl der Dateien welche vom FTP Server downzuloaden sind - diese Dateien werden dann im Browser angezeigt. Nun stellen Sie mit einem geeigneten FTP Client die Verbindung zum FTP Server her (Benutzer: anonymous, Passwort: ihremail@ihredomain.tld) und loaden die angegebenen Dateien lokal auf Ihre Festplatte. Mit dem empfohlenen Progamm unzip32.exe entpacken Sie nun die ZIP Files in ein eigenes Verzeichnis, beispielsweise d:\djgpp. Die Variable PATH ist um die Angabe d:\djgpp\bin zu ergänzen und vor dem Neustart tragen Sie auch noch die Zeile

set DJGPP=d:\djgpp\djgpp.env
in die autoexec.bat ein (siehe auch readme.1st).

Nach dem Neustart des PCs kann das erste C Progrämmchen geschrieben werden...

Das erste C Programm

Das erste C Programm schreiben Sie mit einem ASCII Editor wie folgt:

#include <stdio.h>
int main (){
	printf("Mein erstes C Programm!!!\n");
	return 0;
}

Speichern Sie diese Datei als 1st.c in einem eigenem Verzeichnis ab. Eine kurze Erklärung zum Code:

  • Die erste Zeile ist eine Preprozessoranweisung, damit wird eine Library eingebunden welche die Routinen für die Ein- und Ausgabe beinhaltet.
  • Die Funktion main() ist wie der Name schon sagt die Hauptfunktion, innerhalb main wird die Funktion printf() aufgerufen welche das Literal "Mein erstes C Programm!!!\n" auf STDOUT bringt.
  • Die Funktion return schließlig beendet die main Funktion indem sie den Wert "0" an das Betreibssystem zurück gibt.

Zum Compilieren wechseln Sie in dieses Verzeichnis in der DOS Eingabeaufforderung und tippen das folgende Kommando ein:

gcc -o 1st.exe 1st.c

Wenn alles richtig geschrieben wurde (wichtig ist auch ein Zeilenumbruch nach der letzten "}") so erhalten Sie eine 1st.exe dessen Ausführung auf der Befehlszeile

Mein erstes C Programm!!!
als Ausgabe erzeugen sollte.

Das erste CGI in C geschrieben

Bei einem CGI muss die main Funktion:

  • den entsprechenden header ausgeben,
  • dann die HTML Datei.

Der Einfachheit halber geben wir nach dem header nur eine Überschrift im HTML Format aus und einen neuen Absatz, hier ist der Quellcode:

#include <stdio.h>
/* mein erstes cgi in c geschrieben*/

int main(){
	printf("Content-type: text/html\n\n");
	printf("<h2>Mein erstes CGI in C geschrieben</h2>");
	printf("<p>Das CGI ist nun eine ausführbare Datei!");
	return 0;
}

Speichern Sie diese Datei als wow.c ab. auch hier eine kleine Erläuterung:

  • Die erste Zeile ist wieder eine Preprozessoranweisung zum Einbinden der stdio.h.
  • /* leitet einen Kommentar ein der auch mehrzeilig sein darf, */ beendet diesen.
  • Die erste printf() Anweisung gibt den Content-type (MIME header) aus, die weiteren printf()'s erzeugen den Text als Ausgabe im Browser.
  • return 0 beendet wie gehabt die main()

Zum compilieren verwenden Sie gcc mit dem Schalter -o, damit können Sie den Dateinamen und das Zielverzeichnis (das /cgi-bin/ des Servers) gleich mit angeben.

gcc -o c:\omnihttpd\cgi-bin\wow.exe wow.c

Sofern Sie also den omnihttpd als Serversoftware installiert haben mit dem o.g. Verzeichnis als /cgi-bin/ so zeigt der Aufruf von wow.exe in der Adresszeile

http://localhost/cgi-bin/wow.exe
den Output des o.g. CGI Programmes.

Die CGIC Library von Thomas Boutell

Die Library CGIC vereinfacht das Programmieren in C für CGIs mit welchen Formulare verarbeitet werden. Die Library kann also unter o.g. Link downgeloadet werden (Wichtig: Lizenzvereinbarung lesen!). Nach dem "auspacken" der ZIP Datei erhalten Sie die 11 Dateien:

Makefile
capture.c
cgic.c
cgic.h
cgic.html
cgic.txt
cgictest.c
license.txt
readme.txt
support.txt
testform.html

Auf cgic.html findet sich die Beschreibung der Lib mit Beispielen. Zum "gleich Testen" wurde mitgeliefert: cgictest.c als Quellcode und testform.html als HTML Seite welche cgictest.c als form action=... aufruft (action ist natürlich anzupassen!).

Entpacken Sie also diese 11 Dateien in ein eigenes Verzeichnis. Zum Compilieren der Datei cgictest.c rufen Sie den Compiler im aktuellen Pfad wie folgt auf:

gcc -o cgictest.exe cgictest.c cgic.c
Wichtig: Die Datei cgic.c muss beim Compilieren stets mit gelinkt werden sofern Sie die Library cgic.h verwenden!

Wurde cgictest.c zur cgictest.exe compiliert verschieben Sie diese in das dem Server entsprechende /cgi-bin/ Verzeichnis. Das Zusammenspiel der Seite testform.html mit cgictest.exe kann nun mit dem Browser getestet werden.

Die cgic Library ist auf cgic.html komplett beschrieben.

Variablen der CGI Umgebung anzeigen

Im folgenden Quellcode wird ebenfalls die Library cgic verwendet um bestimmte Umgebungsvariablen im Browser anzuzeigen:

#include <stdio.h>
#include "cgic.h"


/* mein erstes cgi in c geschrieben
gibt Umgebungsvariable im browser aus */

int cgiMain() {

cgiHeaderContentType("text/html");
fprintf(cgiOut, "<HTML><HEAD>\n");
fprintf(cgiOut, "<TITLE>CGI Umgebung</TITLE>\n</HEAD>\n");
fprintf(cgiOut, "<BODY><H1>CGI Umgebung</H1>\n");
fprintf(cgiOut, "cgiServerSoftware: %s<br>", cgiServerSoftware);
fprintf(cgiOut, "cgiServerName: %s<br>", cgiServerName);
fprintf(cgiOut, "cgiGatewayInterface: %s<br>", cgiGatewayInterface);
fprintf(cgiOut, "cgiServerPort: %s<br>", cgiServerPort);
fprintf(cgiOut, "cgiPathInfo: %s<br>", cgiPathInfo);
fprintf(cgiOut, "cgiPathTranslated: %s<br>", cgiPathTranslated);
fprintf(cgiOut, "cgiScriptName: %s<br>", cgiScriptName);
fprintf(cgiOut, "cgiQueryString: %s<br>", cgiQueryString);
fprintf(cgiOut, "cgiRemoteHost: %s<br>", cgiRemoteHost);
fprintf(cgiOut, "cgiRemoteAddr: %s<br>", cgiRemoteAddr);
fprintf(cgiOut, "cgiAuthType: %s<br>", cgiAuthType);
fprintf(cgiOut, "cgiRemoteUser: %s<br>", cgiRemoteUser);
fprintf(cgiOut, "cgiRemoteIdent: %s<br>", cgiRemoteIdent);
fprintf(cgiOut, "cgiContentType: %s<br>", cgiContentType);
fprintf(cgiOut, "cgiAccept: %s<br>", cgiAccept);
fprintf(cgiOut, "cgiReferrer: %s<br>", cgiReferrer);
fprintf(cgiOut, "cgiContentLength: %s<br>", cgiContentLength);
fprintf(cgiOut, "</BODY>\n</HTML>\n");
return 0 ;

}

Speichern Sie auch diese Datei wie folgt ab: d:\boutell\umg.c und compilieren Sie wie gehabt:

gcc -o c:\omnihttpd\cgi-bin\umg.exe umg.c cgic.c

Außer der cgic Library von Thomas Boutell gibt natürlich auch noch andere Bibliotheken welche das Programmieren von CGIs in C vereinfachen. Auf CGI Ressources findet der Interessierte eine ganze Reihe weiterer C Libraries. Der Vollständigheit halber auch hier ein Link zu einer Einführung Programming in C, weitere C Tutorials finden sich mit jeder Suchmaschine.

interAKTIVnet GmbH
Otto-Lilienthal-Str. 36
71034 Böblingen
Tel. 07031-714740
Fax 07031-714744
info@interaktiv.net