Peter: CGI und C mit Server OmniHttpd - "Dokument enhielt keine Daten"

Moin moin!

Ich brauche mal 'nen Expertentip!
Ich muss für ein Praktikum ein paar CGIs in C programmieren. Untenstehender Quellcode sollte
zunächst nur der erste Test sein. Rufe ich diesen allerdings aus einem
HTML-Dokument auf, erhalte ich die Meldung: "Das Dokument enhielt keine Daten".
Dieses ist ja die typische Meldung, wenn man den Header
printf("Content-type: text/html\n\n");
vergessen hat. Aber daran liegt es nicht. Perl Skripte, die sich im gleichen Verzeichnis befinden lassen
sich ohne Probleme starten und tun auch was sie sollen. Der Server Root und
das CGI Verzeichnis sind also korrekt eingestellt.
In der DOS shell läßt sich untenstehendes C-Programm auch ohne Probleme ausführen
und liefert die korrekte Ausgabe.
Muss ich .exe- Dateien im Server irgendwie besonders berücksichtigen bzw. irgendwelche
besonderen Einstellungen vornehmnen?
Ich benutze übrigens den Server OmnihttpD.

Tips?? Ratschläge??

Vielen Dank!

MfG Peter!

#include <stdio.h>
#include <stdlib.h>

int main(void)
{

printf("Content-type: text/html\n\n");
printf("<HTML><HEAD><TITLE>Mahlzeit!</TITLE></HEAD><BODY>");
printf("<H1>MAHLZEIT!!</H1>");
printf("</BODY></HTML>");

} /* end main */

  1. Ich habe beim Kopieren irgendwie das return 0; verschluckt!
    Das ist also auch nicht das Problem! Nur nicht, dass ich falsche Fährten legen will!

    MfG Peter!

    Hier also der korrekte Quellcode (der auch nicht funktioniert!)

    #include <stdio.h>
    #include <stdlib.h>

    int main(void)
    {

    printf("Content-type: text/html\n\n");
    printf("<HTML><HEAD><TITLE>Mahlzeit!</TITLE></HEAD><BODY>");
    printf("<H1>MAHLZEIT!!</H1>");
    printf("</BODY></HTML>");

    return 0;

    } /* end main */

  2. Hi Peter,

    printf("Content-type: text/html\n\n");

    meine C-Kenntnisse sind etliche Jahre alt, aber auf Verdacht hin:

    Wohin schreibt "printf"? Nach stdout oder nach stderr?
    CGI-Ausgaben müssen in stdout ankommen - stderr "fällt hinter die Heizung".

    Viele Grüße
          Michael

    1. Hoi Michael,

      printf("Content-type: text/html\n\n");

      Wohin schreibt "printf"? Nach stdout oder nach stderr?

      Nach 'stdout'.

      CGI-Ausgaben müssen in stdout ankommen - stderr "fällt hinter die Heizung".

      Es faellt normal in das error-log ;-)
      Tatsache ist, dass der einzige Fehler, den ich mir vorstellen kann, im
      Aufrufungs-Mechanismus liegt -- oder funktioniert das Ganze im Direktaufruf auch
      nicht? Dann waere naemlich wahrscheinlich dein Webserver nicht korrekt
      konfiguriert...

      Gruesse,
       CK

      1. Hoi Michael,

        printf("Content-type: text/html\n\n");

        Wohin schreibt "printf"? Nach stdout oder nach stderr?

        Nach 'stdout'.

        CGI-Ausgaben müssen in stdout ankommen - stderr "fällt hinter die Heizung".

        Es faellt normal in das error-log ;-)
        Tatsache ist, dass der einzige Fehler, den ich mir vorstellen kann, im
        Aufrufungs-Mechanismus liegt -- oder funktioniert das Ganze im Direktaufruf auch
        nicht? Dann waere naemlich wahrscheinlich dein Webserver nicht korrekt
        konfiguriert...

        Also im Direktaufruf funktioniert das ganze. Vermutlich lieg es am Server - aber woran?
        Muss ich irgendwo beim Server eine Einstellung vornehmen, dass er .exe Dateien ausführen
        kann? Wie gesagt, meine Perl und PHP Skripte laufen. Gibt es irgendwas, was ich bei ausführbaren Datein
        berücksichtigen muss?

        gebt mir Tipps. Bin doch nur ein armer Etechniker ...:-)

        MfG Peter!

        Gruesse,
        CK

        1. Hi Peter,

          Also im Direktaufruf funktioniert das ganze. Vermutlich
          lieg es am Server - aber woran?
          Muss ich irgendwo beim Server eine Einstellung vornehmen,
          dass er .exe Dateien ausführen
          kann? Wie gesagt, meine Perl und PHP Skripte laufen.
          Gibt es irgendwas, was ich bei ausführbaren Datein
          berücksichtigen muss?
          gebt mir Tipps. Bin doch nur ein armer Etechniker ...:-)

          die Quelle beschreibt zwar nicht exakt Deinen Webserver, aber die Art der Problematik kann bei OmniHTTPD auch nicht wesentlich anders sein als bei den mir bekannten Webservern:

          http://aktuell.de.selfhtml.org/artikel/cgiperl/inbetriebnahme/#a6

          Viele Grüße
                Michael