普通、CGIってのはPerlで作ると思いますが、Perlってのはインタプリタ言語なので
一行一行サーバが解釈して実行するので作りによっては遅い!C言語なら先にサーバが直接理解できるようコンパイルしておくので動作が速い!のです。

そこで、試しにC言語でCGIを作ってみましょうよ。

今回は、単純にブラウザに文字を表示するだけの超簡単なプログラムをC言語で書いてみました。

プログラムを書く

#include <stdio.h>

main()
{
  printf("Content-type: text/html\n\n");
  printf("Hello Internet World.\n");
}

こんだけです。
これをcgi1.cというファイル名で保存してサーバに置く。

最初の

#include <stdio.h>

はただのおまじないです。
Perlで言うところの #!/usr/bin/perl で始まる文みたいなもんでしょうか。
いや、というよりは、use CGI; みたいなものに近いかな。

正しく言うと、『標準入出力に関する標準ヘッダファイルを読み込み、この位置に挿入する』です。
標準ヘッダファイルとは、コンパイラメーカが、よく使う機能をオブジェクトライブラリとして提供してくれた関数群です。この標準ライブラリ関数をプログラムで使用するには、必ずそれぞれの関数に対応する「標準ヘッダファイル」をインクルードしなければなりません。

例えば、main()の中で出てくるprintf関数はこのstdio.hというヘッダファイルに記述されている、というわけです。

main()はC言語では必ず必要です。ここから始まり、ここで終わるわけです。
大きなプログラムでは、その中でサブルーチンがたくさん呼ばれたりしますが、結局最後にはここに戻ってきて終わる。

上のプログラムは超単純なので、printf関数しか使ってません。
printf(“Content-type: text/html\n\n”);
printf(“Hello Internet World.\n”);

perlと文法ほとんど同じですね。

コンパイル

普通、Perlでは実行してみないとエラーがあるか分からないが、C言語ではまず最初にマシンが直接理解できるコードに「コンパイル」するので動かす前にエラーが分かります。

コンパイルするには、

gcc cgi1.c -o cgi1.cgi

と入力してEnterキー。
文法は、gccというコンパイラでcgi1.cというソースファイル(コンパイル前のソース)を読み込んで、cgi1.cgiというファイルを出力する、となります。-o がファイル名を指定するオプションです。

すると、エラーが無ければ、cgi1.cgiというCGI実行プログラムが出来上がります。

実行

これをCGIが実行可能なディレクトリに置いて、ブラウザからhttp://kazuizm.com/cgi1.cgiというふうに入れると、Hello Internet World. と表示されます。

またサーバで直接、

./cgi1.cgi

と打って実行すれば、

Content-type: text/html

Hello Internet World.

と表示されるので、ブラウザで表示されなければ原因解析もできます。

そのうち、もっと実用的なプログラムができたら載せます。cool



こちらもご一緒にどうぞ!