これが意外に簡単です。ただ日本語の扱いはかなり面倒くさいです。 また、セキュリティについては専門書を参照してください。
さらに、通常のプロバイダはCによるCGIを認めていないところが殆どです。また、 ソースをサーバに転送してtelnetでコンパイルするなどということはまず認められないでしょう。
では、どうするかというとWindows用のWebサーバを手に入れて(フリーソフトがいろいろ出回っています。ApacheのWindows用もフリーで手に入ります。)自分の環境で動かします。 安全性を考えてインターネットには接続しないでおきます。 これならすぐに実現できるし、誰からも文句は言われないでしょう。
また、ここではHTMLのタグの知識を前提としていますので、もしこれについて知らないときは、 参考書等で知識を仕入れておいてください。
まずは、CGIでタグを出力して、ブラウザに何かを表示するプログラムを作ってみます。
VC++の人はコンソールアプリで作ります。
HTMLのタグを出力するには、最初に標準出力に
Content-type:text/html\n\nと出力します。最後に改行が2つついているのが味噌です。あとは、printf関数などで どんどんタグを出力します。それだけです。
// cgi01.c #include <stdio.h> int main() { printf("Content-type:text/html\n\n"); printf("<HTML>\n"); printf("<HEAD>\n"); printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n"); printf("<TITLE>cgi01</TITLE>\n"); printf("</HEAD>\n"); printf("<BODY BGCOLOR=\"#FFFF00\">\n"); printf("これはCGIで出力しています\n"); printf("</BODY>\n"); printf("</HTML>\n"); return 0; }できあがったcgi01.exeをリネームしてcgi01.cgiにします。あとはこれをサーバーから見える ところに置いて、ブラウザでcgi01.cgiを呼び出します。
左の図は、上のプログラムをブラウザを介して見たものです。
アドレスが「http://....」となっているのでサーバーを介して見ていることがわかります。 また、サーバーの設定によっては特定のディレクトリに置いたCGIしか実行できないこともあります。 UNIX系の場合はCGIプログラムのファイル・パーミッションを変更して実行可能にしておく必要があります。(Windowsの場合はそのままでも動きます)
さて、念のために上の状態でHTMLのソースを表示させてみます。
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>cgi01</TITLE> </HEAD> <BODY BGCOLOR="#FFFF00"> これはCGIで出力しています </BODY> </HTML>printf関数で出力したものと全く同じですね。筆者はタグについてはあまり詳しくないので
<!DOCTYPE....>などは出力していません。気にくわない人は正しく修正してください。
さて、CGIプログラムはブラウザから直接呼び出すのではなく、HTMLのフォームの サブミットボタンを押したときに呼び出されることが多いと思います。
左の図のようなページで「送信」ボタンを押すことによって、CGIが実行されるのが普通ですね。
ここでは、氏名欄に記入しても無視されます。
念のために上に表示されたページのタグを示します。
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>test</TITLE> </HEAD> <BODY> <FORM METHOD="POST" ACTION="cgi01.cgi"> 氏名:<INPUT TYPE="TEXT" SIZE="40" NAME="namae"><P> <INPUT TYPE="SUBMIT" VALUE="送信"> </FORM> </BODY> </HTML>FORMタグのACTIONにサブミットボタンが押されたとき実行するCGIプログラムを 指定します。METHODはPOSTまたはGETを指定できますがPOSTを指定したときは、 INPUTタグ等が無い状態(ボタンだけ)ではCGI呼び出しがうまくいきません。 その場合はGETを指定します。POSTとGETの違いは、送信できるデータ量、直接サーバの メモリに送信されるかどうかなどの違いがありますが、HTMLの参考書などを参照してください。
Update Jul/17/2002 By Y.Kumei