jAIk
Anmeldungsdatum: 7. Juni 2007
Beiträge: 254
|
Hallo zusammen, die meisten von Euch kenne wahrscheinlich den Blog von Felix von Leitner oder besser bekannt als Fefes Blog (http://blog.fefe.de). Dieser Schreibt in der Kategorie "Fragen? Antworten!" folgendes: Wenn das ohne PHP, Perl, Ruby, MySQL und Java gemacht ist, wie ist es denn dann gemacht?
Ich habe eine Blogsoftware in C gehackt, mit dietlibc, libowfat, unter gatling laufend und mit einem tinyldap-Backend. Kurze Erläuterung: dietlibc = abgeschpeckte libc ⇒ http://wiki.ubuntuusers.de/Baustelle/dietlibc
libowfat = deamon Tools ähnliches Programm, dass Dienste startet und stoppt ⇒ http://www.fefe.de/libowfat/
gatling = winzig kleiner Webserver ⇒ http://www.fefe.de/gatling/
tinyldap = abgespeckes ldap ⇒ http://www.fefe.de/tinyldap/ Meine Frage: Wie kann man so etwas realisieren bzw. nachbauen?
So etwas in der Art habe ich noch nie gesehen und fühle mich deshalb etwas überfordert. Auch wenn ich die C Grundlagen drauf habe stelle ich mir folgende Fragen: 1. Wird die angezeigte Index-Seite einfach nur als HTML erzeugt oder handelt es sich dabei um eine Art in C geschriebenes CGI?
2. Ist ldap wirklich nur das backend oder wird es auch als Datenbanksystem benutzt. An diesen beiden Fragen beiße ich mir gerade die Zähne aus. Würde so etwas auch lehrzwecken selbst gern realisieren. Über jede Hilfe freue ich mich dabei natürlich! Lg Jan
|
stfischr
Anmeldungsdatum: 1. März 2007
Beiträge: 19197
|
Warum willst du das so machen? Soll das auf nem 386er mit 2MB Ram laufen? Mit C wird das sehr unschön. Das sieht man schon, wenn man fefes Seite in den W3C-Validator steckt. Ich würde wenigstens C++ empfehlen oder halt gleich eine der Web-Scriptsprachen: PHP PERL Phyton und dann nen kleinen Apache mit Support für die jeweilige Sprache
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Fefes Quellcode ist frei, wenn dich die Arbeitsweise interessiert, kannst du ihn herunterladen und lesen. Dann siehst du auch, warum man sowas besser nicht tut. Wenn Fefe das für sein Ego braucht, ist das ja ok, sinnvoller Einsatz der eigene Zeit und Arbeitskraft ist das aber nicht.
|
Sid_Burn
Anmeldungsdatum: 23. Oktober 2004
Beiträge: 2159
|
stfischr schrieb: Mit C wird das sehr unschön. Das sieht man schon, wenn man fefes Seite in den W3C-Validator steckt.
Ob die Seite Valide ist oder nicht hat wenig mit C zu tun. Sondern liegt an dem HTML was er generiert. Würde er C++, PHP oder sonst etwas nutzen würde er wahrscheinlich immer noch invalides HTML senden.
Ich würde wenigstens C++ empfehlen oder halt gleich eine der Web-Scriptsprachen: PHP PERL Phyton und dann nen kleinen Apache mit Support für die jeweilige Sprache
Perl ist übrigens kein Akronym und wird "Perl" und nicht "PERL" geschrieben. Du schreibst ja auch nicht PYTHON. Auserdem ist Perl keine Web-Skriptsprache, Python auch nicht, auch wenn es dafür häufig eingesetzt wird.
1. Wird die angezeigte Index-Seite einfach nur als HTML erzeugt oder handelt es sich dabei um eine Art in C geschriebenes CGI?
CGI ist nur eine Schnittstelle die letztendlich besagt welche Umgebungsvariablen übergeben werden oder wie Daten mittels STDIN etc. übergeben werden. Du kannst also ohne weiteres ein C Programm schreiben und es im cgi-bin Ordner deines Webservers legen und er sollte es ausführen. Das was das Programm zurück gibt, üblicherweise HTML, wird dann zum Browser gesendet. Hier spielt es keine Rolle ob die ausführbare Datei nun C, C++, Perl, Python, Ruby, Brainfuck, Erlang, Java, Smalltak, Lua, Ook, D, ... ist. Ansonsten schreibt er nur das er einen Webserver nutzt der in C geschrieben ist. Wahrscheinlich kann dieser ebenfalls CGI und er schreibt seine Seiten als kleines C Programm. Was er aber auch ohne Probleme mit einem Apache machen könnte.
|
jAIk
(Themenstarter)
Anmeldungsdatum: 7. Juni 2007
Beiträge: 254
|
Hallo zusammen, vielen Dank für Eure deine Antworten! @Lunar:
Den meisten Quellcode von fefe habe ich bereits gelesen und ausprobiert. Die Blogsoftware konnte ich leider nirgends finden. Wenn ich da irgendwas übersehen habe und jmd da mehr weiß ich als, würde ich mich über einen Link wirklich sehr freuen. Ich möchte so etwas, wie bereits geschrieben, aus Lehrgründen einfach mal machen. Ob es sich dabei um eine gute oder weniger gute Lösung handelt, möchte ich danach aus den gesammelten Erfahrung gern selbst entscheiden. Deswegen soll das Ziel dieses Threads bewusst keine Diskussion in Richtung "gut" oder "schlecht" sein. Viel mehr würde ich mich über eine Diskussion in Richtung "wie geht das" freuen. Lg Jan
|
Sid_Burn
Anmeldungsdatum: 23. Oktober 2004
Beiträge: 2159
|
1) Installier dir ein Apache 2) Schreib ein C Programm das folgendes ausgibt
Content-Type: text/html;
<html>
<head><title>foo</title></head>
<body>
Hello, World!
</body>
</html>
3) Speichere es unter /usr/lib/cgi-bin/test 4) Mache es ausführbar und setze owner/gruppe auf root 5) Im Browser die URL http://localhost/cgi-bin/test aufrufen und du siehst "Hello, World!"
6) Erweitere das Programm so das es textdateien öffnet und als HTML anzeigt, oder eine Datenbank oder sonst igrendein format. 7) Dein Blog in C ist fertig.
Wie du siehst ist daran nichts besonderes. Sieht auf den ersten Moment nur Cool aus.
|
jAIk
(Themenstarter)
Anmeldungsdatum: 7. Juni 2007
Beiträge: 254
|
Erst einmal vielen Dank Sid Burn, werde deinen Ansatz verfolgen und in den nächsten Tagen mal einen Status zurück geben. Habe mich eben ebenfalls mal in das Thema CGIs in C eingelesen und bin optimistisch. Lg Jan
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4687
Wohnort: Berlin
|
@jAIk: Die libowfat ist doch nicht zum starten und stoppen von Programmen!? Das sind ein paar Hilfsfunktionen und hübschere APIs für verschiedene Aufgaben. Zu 1. Vielleicht hat FeFe das Blog direkt in den Webserver integriert, aber es kann natürlich auch sein, dass es als CGI realisiert ist. Zu 2. Das ist natürlich die Datenbank in diesem Fall. Was hättest Du denn sonst unter dem Begriff "Backend" hier verstanden. Ansonsten ist das schreiben ein Blogs als CGI in C nicht wesentlich anders als in anderen Sprachen. @stfischr: Das will man machen, weil man's kann, oder können lernen möchte. Oder weil's vielleicht nicht auf einem uralt 386er, sondern auf einem modernen Embedded-System laufen soll. Das Blog im Kühlschrank oder so. ☺
|
jAIk
(Themenstarter)
Anmeldungsdatum: 7. Juni 2007
Beiträge: 254
|
Danke Marc 'BlackJack' Rintsch, klar, die libowfat ist natürlich nicht zum starten und stoppen von Programmen da, habe sie mit der minint verwechselt *duck*. Zu 1:
Da ich keine Ahnung von Webserverprogrammierung habe eine vielleicht dumme Frage:
Wie könnte man den Blog in einen Webserver integrieren? Würde man einfach den Quelltext des gatling so umschreiben, dass z.B. eine Kopfzeile bei jedem aufruf angezeigt wird? Zu 2:
Klingt logisch, hatte unter Backend ehr so etwas wie das Joomla Backend im Kopf, aber da hast du sicherlich Recht. Danke für die rege Beteiligung! Lg Jan
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4687
Wohnort: Berlin
|
@jAIk: 1. Man würde sich die Stelle heraussuchen, die die eingehende Anfrage in einer Datei oder auf ein CGI-Programm abbildet und dort noch einen Mechanismus hinzufügen, der den Blog-Code aufruft, der im Webserver dann fest einkompiliert ist. Würde ich aber grundsätzlich nicht empfehlen. Wenn man das als CGI implementiert, ist man wesentlich flexibler in der Wahl des Webservers und beim Testen.
|
stfischr
Anmeldungsdatum: 1. März 2007
Beiträge: 19197
|
Sid Burn schrieb: Ob die Seite Valide ist oder nicht hat wenig mit C zu tun. Sondern liegt an dem HTML was er generiert. Würde er C++, PHP oder sonst etwas nutzen würde er wahrscheinlich immer noch invalides HTML senden.
Du hast natürlich recht, ich meint, dass durch fehlende Stringfunktionen etc. die Sache recht aufwendig wird und somit weniger Enthusiasmus für korrektes HTML übrig bleibt. UTF-8 ist dann auch nochmal nen Kapitel für sich. Perl ist übrigens kein Akronym und wird "Perl" und nicht "PERL" geschrieben. Du schreibst ja auch nicht PYTHON. Auserdem ist Perl keine Web-Skriptsprache, Python auch nicht, auch wenn es dafür häufig eingesetzt wird.
Menno, du nimmst es aber genau. 😉 @jAIk ich wollte dir natürlich nicht reinreden (nagut vielleicht doch), aber wenn du sagst: "Ich will in C schreiben!" dann verstehe ich das. Hab ja selbst mal mit Programmieren angefangen und dabei zum Teil deutlich sinnloseres Zeug als nen Blog in C fabriziert. Irgendwie muss man ja mit lernen Anfangen. Versprich mir bitte, dass du W3C konforme Seiten erzeugst, bitte bitte bitte ☺ Marc 'BlackJack' Rintsch schrieb: @stfischr: Das will man machen, weil man's kann, oder können lernen möchte. Oder weil's vielleicht nicht auf einem uralt 386er, sondern auf einem modernen Embedded-System laufen soll. Das Blog im Kühlschrank oder so. ☺
Hey unsere Waschmaschine hat nen 186er drin, ob wohl www.homepagemeinerwaschmaschine.de noch frei ist? 😉
|
Greebo
Anmeldungsdatum: 21. November 2006
Beiträge: 3443
Wohnort: 97070 Würzburg
|
Marc 'BlackJack' Rintsch schrieb: @stfischr: Das will man machen, weil man's kann, oder können lernen möchte. Oder weil's vielleicht nicht auf einem uralt 386er, sondern auf einem modernen Embedded-System laufen soll. Das Blog im Kühlschrank oder so. ☺
Hey unsere Waschmaschine hat nen 186er drin, ob wohl www.homepagemeinerwaschmaschine.de noch frei ist? 😉
Wenns auch nen alter Drucker sein darf, könnte er ja PS-HTTP nehmen ☺, C lernt er dann während er versucht eine Laufzeitumgebung für C in Postscript zu schreiben 😀
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6502
Wohnort: Hamburg
|
Nur mal so nebenbei, ich hatte mit sowas auch schon rumgespielt. Allerdings mit Bash Scripten und Lighttpd als Server und über fast-cgi. Dabei ist mir aufgefallen, dass man hier ggf. die Serverkonfiguration anpassen muss und ggf. auch die Art der Parameterübergabe. Man muss evtl. dazu auf das Server Environment zurückgreifen.
|
jAIk
(Themenstarter)
Anmeldungsdatum: 7. Juni 2007
Beiträge: 254
|
Jop, das Problem habe. Meldung von localhost/cgi-bin/test: Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/2.2.11 (Ubuntu) Server at localhost Port 80 Mein Quelltext sieht übrigens so aus: 1
2
3
4
5
6
7
8
9
10
11
12
13 | #include <stdio.h>
int main() {
printf("Content-Type: text/html"); // das häufige printf dient der Übersicht!
printf("<html>");
printf("<head><title>foo</title></head>");
printf("<body>");
printf("Hello, World!");
printf("</body>");
printf("</html>");
}
|
Muss mich da wohl mal auf die Suche machen. Über Hilfe freue ich mich natürlich trotzdem 😉 Lg Jan EDIT:
ls -l sagt:
-rwxr-xr-x 1 root root 9147 2009-06-02 21:28 test
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4687
Wohnort: Berlin
|
@jAIk: Hast Du das mal im Terminal ausgeführt? Dann sollte Dir auffallen, dass da kein einziger Zeilenumbruch ausgegeben wird! Und HTTP verlangt eine Leerzeile zwischen den Headern und dem Inhalt. Ausserdem musst Du aufpassen wie Du das Zeilenende markierst, da will HTTP nämlich die Sequenz "\n\r", statt einem einzelnen "\n". Du musst auch nicht so viele printf -Aufrufe machen, weil C beim parsen Zeichenkettenliterale, zwischen denen nur "whitespace" steht, automatisch zu einer zusammenfasst. Also kann man das auch so schreiben: | printf("Content-Type: text/html\n\r"
"\n\r"
"<html>...\n\r"); /* Und so weiter */
|
|