Entry

C で CGI

2004年12月07日

普段は見向きもしない「C Magazine」(12月号)を買ったら,

C/C++ で作る CGI/SSI

なる特集がありました。プログラミング言語が氾濫している今となっては,Perl でしか CGI が作れないと思っている向きはあまりいなそうですけれど,C で作るというのは,ちょっと馴染みがないんじゃないでしょうか。CGI を作るには,標準出力に結果を吐ける言語だったらなんでも構わないので,C を使っても何ら問題はないわけです。もっとも,レンタルサーバには,インタプリタをインストールしていなかったり,シェルの扱いを制限しているところもあるので(Cside さん PHP はいいから Ruby 入れて……),実際上,使える言語と使えない言語が出てくるようですが……。

C による CGI に馴染みがないといっても,情報源はそれなりにあるようで,例えば,手元には『技術者のための C 言語でつくる CGI 入門』(玉川竹春,技術評論社,2002年)なる本があったりします。本書は日本語の扱い方から,query sting の デコード方法,PostgreSQL との連携といった具合に,一通りのノウ・ハウが紹介されています。

ただ,某巨大掲示板の某スレッドによると,セキュリティ的にアレだといった話も……。あたしは,どこらへんなのか分からなかったんですけど……。

そんなわけで,あたしもローカルに Apache を入れて,ほんの少しだけ試してみました。「Hallo world」だけだったら,

#include <stdio.h>

int
main(void)
{
    printf("content-type: text/html\n\n");
    printf("hello world.");
    return 0;
}

だけで動きます。簡単ですね。ただ,毎度この調子でやるのは,さすがにしんどいです……。「C Magazine」にしても『技術者のための……』にしても,ここから先については意識してか意識せずにか,詳しく触れていません。「ここから先」というのは,例えば,次のようなこと……

  • 基本的にサーバと同じ OS でコンパイルする必要がある(Cside は赤帽なんだとか……トホホ)
  • ページデザインを手軽にしたい(全部 printf/fprintf で書くのは嫌)
  • query string の管理
  • (おなじみ)メモリ管理
  • サニティチェックに必要な文字列操作(検索・置換)
  • 日本語を扱うのに必要な文字コードの制御

どれもこれも CGI には必要な機能ですけれど,まとまったプログラムにするには,ある程度ライブラリ化しないとしんどそうです。

一方,CGI を C で書くメリットというと,次のようなものが挙げられるようです。

  • (一般的に)速い
  • (一般的に)メモリの消費が少ない
  • インタプリタ型の言語と違って,コードを見られることがないので,(比較的)セキュリティが高い
  • ライブラリが豊富

C の場合,インタプリタ等々を起動する際のオーバーヘッドが無いので,うまくコーディングすれば,一般的に速くて小さなプログラムになるようです。もっとも,インターネット自体の帯域を考えると,よっぽどアクセスの多いサイトじゃない限り,プログラムが速くても大した意味はなさそうですが(某巨大掲示板サイトは C で書かれているとか,いないとか……)。むしろ,庶民としては,ライブラリが豊富に揃っているのが,利点になるんじゃないでしょうか。

あたしはというと,ただのモノズキで少しやってみようかと思っています。CGI は文字列の操作やメモリ管理といった,「C の難所」がバリバリ必要になってくるので,いい修行にはなりそうですしね。

参考までに,CGI に役立ちそうな C ライブラリを紹介してみます。

HTML の生成ライブラリでも揃えば,あながち無理な話でもなさそうですね……。

Trackback
Trackback URL:
[2015年09月16日 21:51] bracciale chiodo repliche cartier from bracciale chiodo repliche cartier
Love the tool, and I seem to have to working OK. But two things…. [more]
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN