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