まずホームページのディレクトリに移動しましょう。
www:~$ cd public_html www:~/public_html$
初めての方は,まずCGIの勉強のためのディレクトリ(フォルダ)を作りましょう。
www:~/public_html$ mkdir cgi
そして,そこに移動しましょう。
www:~/public_html$ cd cgi www:~/public_html/cgi$
昔からC言語を勉強するときに最初に学ぶことは, 画面に「Hello, world」と出力するプログラムを作ることです。 日本語なら「こんにちは!」と出力すればいいでしょう。 C++ なら次のようになります。
#include <iostream> using namespace std; int main() { cout << "こんにちは!\n"; }
これを hello.cc というファイル名で作ります。 コンパイルするには次のように打ち込みます。
www:~/public_html/cgi$ g++ -Wall hello.cc
すると,a.out という名前の機械語のプログラム(実行可能プログラム)ができます。 この a.out に対して, 元の hello.cc をソースファイルまたはソースコード, あるいは単にソースといいます。 ソース(source)とは「源」という意味の英語です。
a.out を実行するには次のように打ち込みます。
www:~/public_html/cgi$ ./a.out
これはまだ CGI ではありません。 これを CGI にするには,次のように直します。
#include <iostream> using namespace std; int main() { cout << "Content-type: text/html\n\n"; cout << "こんにちは!\n"; }
これをコンパイルして,今度は機械語のファイル名を hello.cgi としましょう。
www:~/public_html/cgi$ g++ -Wall hello.cc -o hello.cgi
これを実行してみましょう。
www:~/public_html/cgi$ ./hello.cgi
これをあなたの Web ページからリンクします。 それには,ホームページの適当な場所に
<a href="cgi/hello.cgi">CGIのテスト</a>のように書きます。
自分のホームページを見て,動作を確認しましょう。
もうちょっとかっこよくしてみましょう。
#include <iostream> using namespace std; int main() { cout << "Content-type: text/html\n\n"; cout << "<h1>はじめての CGI</h1>\n"; cout << "<p>こんにちは!\n"; }
C言語のソースファイル名は昔から .c で終わるものと決まっていますが,C++ についてはいろいろな流儀が混在します。 ここでは .cc にしましたが, この授業で使うコンパイラ g++ では .cc 以外に .cpp,.C(大文字),.cxx を C++ ソースと認識します(.c も使えます)。 MS-DOS や Windows では .cpp が一般的です。 Stroustrupの本ではC言語と同じ .c が使われています。 ヘッダファイル(まだ勉強していません)はC言語と同様に .h とするか,あるいは .hpp,.hh,.H とします。
少し古い C++ では
#include <iostream> using namespace std;の代わりに
#include <iostream.h>と書きます。 この授業で使っている g++(gcc 2.95.2)ではどちらの使い方もできます。 また,
using namespace std;も現バージョンでは省略できます。
CGIの頭には次のように書くことになっています。 これはHTTPヘッダを出力する部分です。
cout << "Content-type: text/html\n\n";
ここで \n は改行コードを出力する命令です。
次のように習ったことがあるかもしれません。 UNIXの改行コードは16進で 0A だけ, Macintoshの改行コードは16進で 0D だけ, Windowsの改行コードは16進で 0D OA の2バイトです。
ところが,HTTPヘッダでは改行コードは 0D OA の2バイトにする決まりになっています。 サーバがUNIXの場合,これでは困るのでは? ご心配は無用。 サーバがちゃんと 0D OA に変換してくれます。 ただしヘッダの部分だけです。 本文データについては無変換です。
リンクはご自由にどうぞ。
松阪大学 奥村晴彦 okumura@matsusaka-u.ac.jp
Last modified: Mon Sep 3 16:51:19 JST 2001