なぜホームページを作るのですか?作るだけでは終わらない千客万来亭

fastcgi 再び その2(C言語)

fastcgi を検討しているということは、とにかく処理速度を上げたいとか、そんな要望があって検討しているはずですよね。

さらにメモリの使用量も極限まで切り詰めたいとか言う話が加わってくると、当然ながらネイティブコンパイルされる言語での作成も視野に入ってくるのではないでしょうか。

そんなわけで、C言語での FastCGI 話を。

まずは、C言語で単純なCGIを作ってみましょう。

#include <stdio.h>

int main() {
  printf("Content-Type: text/plain; charset=UTF-8\r\n\r\n");
  printf("Hello World!");
}

main から始まって、ヘッダを返して、ボディを返すという CGI の基本中の基本をそのまま実装しています。

FastCGI では、http サーバからこのFastCGIプログラムに対してソケット接続して来ますから、通常のクライアントサーバシステムで言うところのサーバ側プログラムがFastCGIのやるべき部分ということになります。

そんな面倒くさい部分を全部まとめてやってくれてしまうのが、libfcgi というライブラリです。

Debian Lenny では、Shared Object として提供されており、開発する際に使用する -dev パッケージと合わせて、インストールしておけばよいでしょう。他のディストリビューションでも libfcgi ぐらいで探せばきっと見つかるはずです。

というわけで、上記のプログラムを FastCGI 化するとこうなります。

#include <stdio.h>
#include <fcgi_stdio.h>

int main() {
  while (FCGI_Accept() >= 0) {
    printf("Content-Type: text/plain; charset=UTF-8\r\n\r\n");
    printf("Hello World!");
  }
  return 0;
}

perl の FastCGI のところでも書いたとおりで、書き直すのはとっても簡単ですね。

リンクするときは、libfcgi.so をリンクしてあげる必要がありますので、-lfcgi とかそんなオプションをつけてやってください。

fastcgi 関連記事