プロが教える店舗&オフィスのセキュリティ対策術

 この度、卒研で簡単なソフトウェアを作ろうとしているものです。
 とりあえずJavaScriptとhtmlで作ろうとなり、先生に話をしたところ、C言語で作ることは可能である、と言われました(但し勧められませんでしたが)。

 自分は今までC言語によるプログラミングをしていたので出来ればそれを使ってやりたい、と思っているのですが、どういう風にやるのか参考になる例が見つかりません(先生は出張中です)。

 どなたかいい例や方法が分かる本、ホームページを教えてください。よろしくお願いします。

A 回答 (8件)

> 実を言えば、CGIというものがどういったものなのか、


> と言う時点で分からないんです。
>  申し訳ありませんが、どなたか簡単に教えてくれませんか?

CGI(Common Gateway Interface)についてですか。

RFC 3875がCGIの仕様書ということになってます…
http://www.ietf.org/rfc/rfc3875.txt

この文書の1章 IntroductionにCGIとはどういうものかということが書かれています。

CGIを作成するにあたっての注意点は以下に。

一般的には、4.1章にあげられているMeta-Variablesは、環境変数を経由して届くので、getenv(3)を使って取り出してください。
また、4.2章のRequest Message-Bodyは標準入力を経由して届くので、fread(3)などを利用して読み込んでください。
また、6章のCGI Responseですが、これも一般的にはprintf(3)などでstdoutにそのまま出力すればよいです。
Response Header FieldsとResponse Message-Bodyの間に空行が必要です。余分にひとつNLを入れるのを忘れないでください。

あとは、そうですね、実行形式のバイナリがそのままCGIとして動作するので、拡張子を.cgiなどのCGIとして動作するものにすればよいでしょう。

一例を挙げておきます

#include <stdio.h>
#include <stdlib.h>

int main(void )
{
char *env;
env = getenv("QUERY_STRING"); /* QUERY_STRINGは、URLの?以降の部分です。*/

printf("Content-Type: text/html\r\n"); /* Response Header Fields */
printf("\r\n");/* 空行 以下はResponse Message Body */
printf("<html><body>\n");
printf("This is CGI test program<br>\n");
if(env != NULL) printf("QUERY_STRING=%s", env);
else printf("QUERY_STRING is not found");
printf("<br>\n");
printf("<body></html>\n");

return 0;
}
    • good
    • 1

> コンパイルや実行の方法がよく分かりません。


> ".c"でやればいいのでしょうか?

CGIにしたい場合のコンパイルは特段なにもいうことはありません。普通にコンソールアプリケーションを作る形でよいでしょう。
つまり、
gcc -o a.cgi a.c
などです。

設置はシェルスクリプトやperlなどで作成されたCGIと同じです。違うのはperlやシェルスクリプトはテキストベースのスクリプトであるのに対して、コンパイルした機械語のバイナリファイルだということだけです。
パーミッションも同様です。

簡単ですから、まずは一度やってみればいかがですか。

この回答への補足

 補足ではありません。ご報告です。

 実は、いろいろあって、予定を変更することになりそうです。変更後では、CGIを使うことは難しそうなので、この質問を締め切らせていただきます。
 ご回答してくださった方々、ありがとうございました。

 尚、ポイントはahoaho_hiroさんとrentaheroさんに送ります。

補足日時:2006/02/02 08:24
    • good
    • 0
この回答へのお礼

 なるほど、普通にコンパイルするだけみたいですね。杞憂でしたか。

 実行はシェルやperlと同じということですね。じゃあ、C言語にしたところで何か特別なことはない、という事になりますね。

 ご回答ありがとうございました。

お礼日時:2006/02/02 08:23

昔JRの仕事でやりました。



各種情報を選択、入力してその結果を出すというものです。
HTMLの"POST","GET"とかでユーザーの入力を取得し
DB検索、結果表示です。

ただ作成するだけなら

for (i=0;i<10;i++)
{
printf("<TR>"
   for (j=0;j<5;j++)
   {
   //表のデータ
   printf("<TD>%d,%d</TD>\n",i,j);
   }
printf("</TR>\n"
}

のようにするだけです。(IIS環境)
ようするに printfでHTMLタグを書きます。

JavaScriptは入力規則のチェックに使いました。
ソースもあるけど、さすがに公開するのはまずいので・・・

コンパイルはWindows(IIS)ならVC
Unix系ならgccを使います。


http://www.travel.eki-net.com/area/index.asp

参考URL:http://www.travel.eki-net.com/area/index.asp
    • good
    • 0
この回答へのお礼

 なるほど、これならばすぐに出来ますね。これも一つの方法ですね。
 ご回答、ありがとうございました。

お礼日時:2006/01/31 08:44

No.2です。



卒研だから今まで学んだことを活かすという意味で良い選択だと思いますが、C言語を使ったCGIは、業務ではあまり使われていないと思います。先生が勧めなかった理由かもしれません。

主流はPHPでしょうね。DBも使ってWEBアプリが作れれば、その道に進んだ時にかなり約に立つと思いますよ。

ASPやJAVA(JSP、Servlet)もお勧めです。
ASP、JSPならコンパイルの必要はありません。サーバが勝手にやってくれます。
どれも基本的な考え方は同じで、「アクセス毎にプログラム実行でHTMLを作り出す」というものです。

何を使って作るのか、先生に相談してみて下さい。
私はJAVA(JSP、Servlet)がお勧めです。
    • good
    • 0
この回答へのお礼

 少しお返事が遅くなってしまいました。申し訳ありません。

 C言語のものは使われないんですか。それもあるのかもしれませんね。
 Javaに関しての知識が無いので、少し尻込みしますね。
 とりあえず、先生に連絡・相談をしているところです。これから先を行うかどうかは先生のご回答によるところです。
 ご回答ありがとうございました。

お礼日時:2006/01/31 08:37

ちなみに#4であげたCプログラムと同様の動きをするシェルスクリプトは、以下のとおり




#!/bin/sh

printf "Content-Type: text/html\r\n"
printf "\r\n"
printf "<html><body>\n"
printf "This is CGI test program<br>\n"
if [ -n "$QUERY_STRING" ]; then
printf "QUERY_STRING=$QUERY_STRING"
else
printf "QUERY_STRING is not found"
fi
printf "<br>\n"
printf "<body></html>\n"

exit 0

UNIXの場合、このスクリプトに実行権限をつけて(chmod +x a.cgi など)HTTPサーバからCGIとして呼び出すと同様に動きます。

参考になれば。
    • good
    • 0
この回答へのお礼

 ご回答ありがとうございます。
 CGIのことはいくらか分かったと思います。

 例までつけていただき、有難いのですが、コンパイルや実行の方法がよく分かりません。".c"でやればいいのでしょうか?
 このような初歩的なところで躓いて申し訳ありませんが、教えていただけませんか?

お礼日時:2006/01/29 06:49

先生が「可能である」とおっしゃったのは、おそらくCGIを作ることについてかと思います。



C言語で、より実用的なホームページ作成プログラムを作ることは可能です。HTMLをアップロードする前に、そのC言語のプログラムを通しておくのです。

たとえば、単なるテキストを読み込んで、それをHTMLに変換するプログラムなどです。普通ならSSIで処理するようなものを、静的に解決するツールだけでも結構有用です。
    • good
    • 0
この回答へのお礼

 ご回答ありがとうございます。
 しかし、No.2のahoaho_hiroさんのお礼で書いたのですが、CGIというものが分かりません。ですので、お礼を言っていいのか、補足をした方がいいのか分からない状況です。

 「HTMLに変換するプログラム」とありますが、Cプログラムで出てくる「atoi関数」といったものと同種のものですか? それならば自分でも、少し話が分かるのですが…。

お礼日時:2006/01/28 23:48

C言語を使ってCGIを作りなさい、という意味ではないでしょうか?



参考URL:http://www2k.biglobe.ne.jp/~motoi/cdecgi.html
    • good
    • 0
この回答へのお礼

 ありがとうございます。早速拝見させていただきました。
 しかし、まだ最初のページしか見ていないのですが、よく内容が分かりません。
 実を言えば、CGIというものがどういったものなのか、と言う時点で分からないんです。
 申し訳ありませんが、どなたか簡単に教えてくれませんか?

お礼日時:2006/01/28 23:43

"ホームページをC言語で作る"とはいかなる意味ですか?

この回答への補足

 申し訳ありません。確かに分かりませんね。
 自分のイメージとしてこの「教えて!goo」での投稿、回答のページがいい例だったので、つい「ホームページ」としてしまいました。
 つまり、ボタンと入力フォームを主体にしたソフトウェアを作りたい、と言うことです。

補足日時:2006/01/28 23:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!