C CodでCコードをスクリプトのように扱う:Programing Bible
CまたはC++で書かれたコードが既に存在し、その機能の一部をプロトタイプとしてWebに公開したいという場合には、C言語をスクリプティング言語のように扱うことを可能とする「C Cod」が最適だ。
C Codは、C、C++、またはObjective-Cコンパイラのフロントエンドとして、C言語をスクリプティング言語のように扱うことを可能とするものである。C Codには、C Server Pagesが付属している。C Server Pagesは、WebアプリケーションをCまたはC++で記述し、それをオンデマンドで自動的にコンパイルできるようCGIをサポートする。
Ubuntu、Fedora、openSUSE用のC Codパッケージは存在しない。今回は、64ビットのFedora 9マシン上でバージョン1.2.8のソースをビルドした。コンパイル中に小さな問題が生じたが、以下に示すように、CFLAGSにposition-independent code(PIC)のオプションを加えることで解決した。PICコードは、メモリの別の場所にロードできるという利点がある。これは、共有ライブラリのコードをコンパイルする場合には好都合である。複数のライブラリが同じアドレスを使用しないように、それらを移動させることができるためだ。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
最初にccodを使用しようとしたとき、以下のようにSegmentation faultが生じた。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
調べてみると、cksum()関数が原因であることが分かった。試行の結果、変数sのサイズを以下のように変更すると問題が修復された(少なくともクラッシュはしなくなった)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
先ほどの例では、ソースコードをできるだけ標準のCファイルに近い形のままにしてccodを使用した。単一ファイルからなる簡単なプログラムであれば、ソースコードの上に2行追加するだけで、ccodを使用できる。ccodのWebサイトにあるサンプルのほとんどは、PHPに倣って定義された、混在モードのC構文を用いている。例えば以下の例に示すように、main()関数は存在せず、
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この構文は、提供されるC Server Pagesインタフェースを用いたWebプログラミングにccodを使用する場合に適している。ドキュメントページには、C Server Pagesを用いたCGIプログラミングをかなり容易にしてくれる、ちょっとした関数の集合が提供されている。セッション処理、クッキー、フォーム、クエリ文字列へのアクセス、リダイレクトなど、Webプログラミングに必要となる関数が、C Server Pageアプリケーション向けの一般的なC関数としてすべて提供されている。
最初に示した例では、「#pragma CCOD:script」を用いて、ccodがCソースファイルを扱う方法を指定している。同プロジェクトでは、このようなpragmaが10種類ほど提供されており、使用するコンパイラ、コンパイラに指定するフラグ、プログラムにリンクするそのほかのライブラリ、C Server Pageプログラム特有のオプション数種を指定可能だ。
ccodはコンパイル済みのバイナリをキャッシュするため、実行の度にソースコードがコンパイルされるわけではない。もちろん、今回わたしがcksum関数に加えたちょっとした変更は、しっかりとテストしたわけではないので、キャッシュ処理を妨害してしまっているかもしれない。問題は、変数sに大きすぎる値が代入されているためであるようだったため、データ型を変更した。別のチェックサム関数をどこかから持ってきて、cksum関数の中身を完全に入れ替えてしまうというのも解決策の1つかもしれない。
CまたはC++で書かれたコードが既に存在し、その機能の一部をプロトタイプとしてWebに公開したいという場合には、C Codが最適だろう。簡単なコーディング、コンパイル、テスト実行を繰り返す作業でC Codを用いれば、makefileを作成したり、コンパイルプロセスを気にしたりする煩わしさから解放してくれる。
Ben Martin 10年以上にわたってファイルシステムを研究。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。
Copyright © 2010 OSDN Corporation, All Rights Reserved.
関連記事
1つのシェルから複数のSSHセッションを同時に実行するツール3種類を試す
複数のリモートマシンを管理しなければならないシステム管理者は多い。そんな悩める管理者のために、並行処理型のSSHツールを3種紹介しよう。それぞれに長所があり、あなたの悩みをきっと解決してくれる。
レイテンシ最大のプロセスを特定するLatencyTOP
システムを効率化するには、ボトルネックを改善するのが第一歩となる。各自のシステム上で実行するアプリケーションに何がレイテンシをもたらしているかを特定するLatencyTOPは、ボトルネックの改善に大きく寄与する。
Programing Bible:ratproxy――Webアプリケーションのセキュリティレベルを検証するGoogle提供ツール
先日Googleからリリースされたプロキシ型の脆弱性発見ツール「ratproxy」。高度に複雑化した最近のWebアプリケーションのセキュリティ試験を行う際に役立つ同ツールを使ってみた。
FreeBSDでLAMPをセットアップする
Linuxと同等、もしくはそれ以上に各方面の第一線で活用するFreeBSD。ライセンスやメンテナンスの面でApacheやMySQLなどを使うことに抵抗もあるかもしれないが、FreeBSDでこれらを使ったサーバの構築法を解説しよう。- /etc/ファイル群の編集を簡単化するAugeas
- ■■設定ファイルの記述内容を自動で解読するAugeasの登場により、/etc/ファイル群に代表される設定ファイルのアップデート時に独自のスクリプトを構築するという負担は大幅に軽減できる。
sysprofでシステム全体の動作をプロファイリングする
アプリケーションを最適化するには、どの関数が最もCPU時間を消費しているかを明らかにし、そうした部分のコードの高速化に集中させればよい。ここでは、パフォーマンスのボトルネック調査に利用できるsysprofを紹介しよう。
SCSH(Scheme Shell)スクリプト入門
Schemeプログラミング言語をベースとしたスクリプト言語「SCSH」。ニコニコ動画上で動作するLispインタプリタなども登場した今こそ、LispやSchemeに触れてみるいいチャンスなのかもしれない。
Linux仮想化入門
仮想化技術は日進月歩の勢いで進化を遂げている。本稿では、これから仮想化技術を試してみようとする方のために、よく使われている仮想化環境であるVMware、VirtualBox、QEMUの3つを紹介する。
WindowsとLinux 仮想化を使わない共存
WindowsとLinuxを共存させるための仕組みは幾つも存在する。andLinuxはWindowsとLinuxをホストOSとゲストOSとに分けようとせず、単なる共存ではなく共同を可能にする。
Programing Bible:CAPTCHA機能を用いたWebフォーム入力を実装する3つのユーティリティ
コンピュータと人間を区別する完全に自動化された公開チューリングテストである「CAPTCHA」 は多くのWebフォームで目にすることができる。本稿では、PHPでCAPTCHA機能を実装するために利用可能な3つのアプリケーションを比較する。
不要なパッケージを完全に削除できるインストーラー GNU Stow
Linuxを使っていて、自分でコンパイルしインストールするタイプのパッケージ管理が面倒に感じたことはないだろうか。その煩わしさを解消するパッケージマネージャ「GNU Stow」を紹介しよう。
