[H8-ML(5243)] Re: GUI について
From: Shigeru Makino <mac@xxxxxxx>
Date: 2004年12月24日(金)14時39分35秒
macです。

たびたびすみません。

わさびぃ さん:
> とりあえず、書店に行って、htmlを吐き出すための
> C言語コードの書き方を見なくては・・。CGI、CGI,CGI・・・

先程、どーしようもない本の話しましたが、
CでCGI書くのは、ぜんぜん難しくありません。
もっとも困難なのは、
「全世界中からアクセスされても大丈夫な、
完璧なセキュリティホールつぶし。」で、

社内の「善意のオペレータ」がいじる場合、
そこまで神経質になる必要はありません。

hello, worldじゃ、屁の役にも立たないので、
============================================================
#include <stdio.h>

int main(int argc, char argv[], char *env[])
{
        FILE *fp;
        char buf[BUFSIZ];

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

        printf("<html>\n");
        printf("<hader>\n");
        printf("</hader>\n");

        printf("<body>\n");
        printf("<xmp>\n");
        printf("test\n\n");

        if ((fp = popen("/usr/bin/printenv", "r")) == NULL) {
                printf("popen error!\n");
        }
        else {
                while (fgets(buf, BUFSIZ, fp) != 0) {
                        printf("%s", buf);
                }
                pclose(fp);
        }

        printf("</xmp>\n");
        printf("</body>\n");
        printf("</html>\n");
        return(0);
}
============================================================
URLの後ろに?と引数をつけると、
============================================================
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char argv[], char *env[])
{
        FILE *fp;
        char buf[BUFSIZ];
        int i;char *p;

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

        printf("<html>\n");
        printf("<hader>\n");
        printf("</hader>\n");

        printf("<body>\n");
        printf("<p>\n");
        if ((p = getenv("REMOTE_ADDR")) != NULL) {
                printf("Your IP = %s\n", p);
        }
        else {
                printf("No IP\n");
        }
        printf("</p>\n");
        printf("<p>\n");
        if ((p = getenv("QUERY_STRING")) != NULL) {
                printf("QUERY_STRING = %s\n", p);
        }
        else {
                printf("No QUERY_STRING\n");
        }
        printf("</p>\n");
        printf("</body>\n");
        printf("</html>\n");
        return(0);
}
============================================================
QUERY_STRINGって、そうなってたのとか、などとやっているうちに、

そこそこ作った「小道具」を溜め込めば、
perlより簡単で読みやすく、速度は10倍以上速い
CGIが簡単に書けることに気づくでしょう。

それに、(これが危険だから避けて通っているのですが)、
Cだから、I/Oも制限なしに操作可能です。
通常は、apache, nobodyの権限で動いていますが、
/etc/sudoersの設定で、別の権限を与えることもできるのです。

-- mac


スレッド概略
[5235(R)](起点)
 └[5237(U)]
   └[表示中]
     └[5245(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]