Hello, world!

まずホームページのディレクトリに移動しましょう。

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";
}

★参考1

C言語のソースファイル名は昔から .c で終わるものと決まっていますが,C++ についてはいろいろな流儀が混在します。 ここでは .cc にしましたが, この授業で使うコンパイラ g++ では .cc 以外に .cpp.C(大文字),.cxx を C++ ソースと認識します(.c も使えます)。 MS-DOS や Windows では .cpp が一般的です。 Stroustrupの本ではC言語と同じ .c が使われています。 ヘッダファイル(まだ勉強していません)はC言語と同様に .h とするか,あるいは .hpp.hh.H とします。

★参考2

少し古い C++ では

#include <iostream>
using namespace std;
の代わりに
#include <iostream.h>
と書きます。 この授業で使っている g++(gcc 2.95.2)ではどちらの使い方もできます。 また,
using namespace std;
も現バージョンでは省略できます。

★参考3

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