トップページphp
507コメント145KB

C言語CGI専用スレッド

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/04(金) 04:31ID:???
C/C++ CGI 専門のスレッドです。
PERL-CGI の情報はどこでも手に入りますけど
C-CGI の情報は少ないです。
C言語のCGIに関することはここに書きましょう。

スクリプトを検索できるサイトです。

http://script.lovely.to/search/home_script_c.html
http://cgi.resourceindex.com/Programs_and_Scripts/C_and_C++/
http://www.cgifiles.com/scripts/cc++/index.shtml

前スレ
http://tako.2ch.net/test/read.cgi?bbs=perl&key=971762830
0083名無しさん@お腹いっぱい。01/08/31 12:06ID:yzeHKSD2
C で CGI 作ると、Perl で作るのに比べて、10倍時間がかかって、なおかつバグだらけ、というカキコがプログラマー板であった。
これは、一般的に逝ってそうなのか、それとも、そのコードを書いたやつがたまたまヘタレだったのか。
0084名無しさん@お腹いっぱい。01/08/31 12:26ID:ZHAulmbY
間違いなく時間はかかる
0085名無しさん@お腹いっぱい。01/11/03 00:20ID:Z5GZ1dPh
 こんなこと聞いていいのかわからんが・・・
 箱庭のC++バージョンのコンパイルのことで聞きたいス。

 今借りてるサーバがTELNET使用禁止なんだけど、GCCは使用可とのこと。
 こういう場合は、CGIを使ってコンパイル出来るヨ・・・って聞かされたんだけ
ど・・・。
 検索して「telnet.cgi」っていうのを見つけたけど、なんか箱庭をコンパイルでき
そうな感じがしない・・・。

 誰かわかる人います?
0086名無しさん@お腹いっぱい。01/11/03 00:22ID:???
>検索して「telnet.cgi」っていうのを見つけたけど、なんか箱庭をコンパイルでき
>そうな感じがしない・・・。

感じで決め付けるな。
00878501/11/03 00:44ID:Z5GZ1dPh
 といいますか・・・
 telnet.cgiではソースファイル拡張子の設定が一種類しかできない
ようなのでムリかな・・・と。
 箱庭C++版は「.c」と「.h」を使うので。
0088名無しさん@お腹いっぱい。01/11/03 00:55ID:???
それは悲惨ですね、ShellかperlかC、どれでも良いので少し勉強しましょう
或いは出来る人に頼みましょう。
ここでサポート出来る段階ではないです。
00898501/11/03 01:01ID:Z5GZ1dPh
 perlならそれなりにいけるんですが。
 確かにshellとCはまるでダメです。
 書籍のコンパイルの説明などをいろいろ目をとおしたけど、どれも
CGI(Perl)を使ったやり方の説明がなかったので。
 なんかいい書籍はないですかねぇ・・・。
 ご忠告感謝です。
0090名無しさん01/11/03 01:05ID:???
まあまあ、hはソースじゃ無い、ヘッダファイル
良く解らんけど、その感じだと多分エラーを捕まえて無いんだろ?
どんなcgi使ってるか知らないが適当にファイルにリダイレクトでも
しなきゃ、エラーが読めないじゃん。
で、読めたとしても、まあ悲観的に言うと8割方処理系依存で一つや二つ
エラーが出ると思うが。
それを直して、またコンパイルして・・・・
コーディングしろとは言わんが、ローカルでコンパイル位出来ないと
道は遠そうだ
0091名無しさん@お腹いっぱい。01/11/03 01:12ID:???
Cわからんのにコンパイルするなや・・・
Perlとちがって低いとこまでいじれるから,
問題起きた時大変だよ。
それが原因で鯖トんだりしたら,85氏の責任。
いろいろ請求されたりするかもしれん。

鯖名・telnet.cgi・GCC・.hとかで検索かければ,
先人がなにか書いてるかもね。
00928501/11/03 01:43ID:Z5GZ1dPh
 え〜と・・・
 まだコンパイル自体してないんです。
 telnet.cgiについてもよくわかっていないので。
 あせらずオイオイ勉強していくことにします。
 お二方のご助言感謝。
0093名無しさん@お腹いっぱい。 01/11/03 01:45ID:???
取り合えずCygwinでも入れれば?
タダだし、暇つぶしにはなると思うよ
PERL分かるなら、コマンド投げてる所の下にでも system ("$hoge 2>>./error.txt");
とでも書いてerror.txt置いとけばメッセージは読めるよ(読みにくいけど。。)
0094名無しさん@お腹いっぱい。01/11/03 02:04ID:???
まだやって無いのカー (-▽- ;)
http://www.cygwin.com/
WINでUnixLIKEなシェルが使えるよ、これでしばらく遊べば
後は同じ事をサーバでやるだけだから・・・・
コケた時にSTDERRを上手くキャッチするこってす
00958501/11/03 09:29ID:m85yJ//j
 なるほど・・・cygwinでシェルのお勉強ですね。
 では早速試してみることにします。

 それにしても質問が激しくアレだったので「厨房氏ね」とかいう
レスを覚悟してたら・・・親切なレスついて嬉しいス。
 これからはCとshellの勉強に励む事にします。
 みんなありがと〜。
0096名無しさん@お腹いっぱい。01/11/08 18:55ID:???
CとPHPどっちがいいの?
0097名無しさん@お腹いっぱい。02/01/15 13:27ID:NbvxSmgA
やっぱCだと一旦コンパイルすればインタプリンタ系に比べれば
速いor転送量・サーバ負荷が軽減されるぜ!がんばれ!
0098名無しさん@お腹いっぱい。02/01/15 13:45ID:???
>>97
「転送量」は吐き出すモノによって変わるものだから、
C でやろうが Perlでやろうが同じです。
0099名無しさん@お腹いっぱい。02/01/15 15:01ID:8PDDHsp4
ちょっと質問よろしいでしょうか?
C言語でのCGIの場合、領域の確保が問題に思えます。
相手がどこまでのサイズのデータを送信してくるかわかりませんし。
送信フォームでサイズ指定をしても、悪意を持ったものに
不正なサイズの大きなデータを送られたら、領域に指定した
サイズをオーバーしてしまうように思えます。
リファラーなどで制限しても、それくらいはどうにでもなりますし。
かと言って、無闇に初期化する領域を大きくしてもメモリの無駄に感じます。

皆さんはそのような事に対してどのような対策をとっておられるのでしょう?
C言語の勉強をしているのですがどうにもそこで詰まってしまって・・・。
どうか、どなたかご教授ください。
0100日下部圭子 ◆ib749tYo 02/01/15 15:42ID:???
In article >>99, 名無しさん@お腹いっぱい。/99 wrote:

> C言語でのCGIの場合、領域の確保が問題に思えます。
> 相手がどこまでのサイズのデータを送信してくるかわかりませんし。

malloc()やrealloc()を使って動的に確保するのが一般的でしょう。
データの最大長が数十キロや数百キロ程度なら、固定長で確保しても
問題ないと思いますが。

> 送信フォームでサイズ指定をしても、悪意を持ったものに
> 不正なサイズの大きなデータを送られたら、領域に指定した
> サイズをオーバーしてしまうように思えます。

Cに限らず、どのような言語でもデータ量の上限チェックは入れる
必要がありますよ。

# CGIだと、Webサーヴァーのほうで制限してくれるのかな?

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
01019902/01/15 16:21ID:???
親切な回答ありがとうございました。
malloc関数はこういう時に使うのですね。
今まで色んな所でsizeof演算子と組み合わされているのを見てきたのに
いまいち良くわかっていなかったのですが、ようやく理解できました。
これから色々試しながら勉強していこうと思います。(もちろんローカルで)
勉強になりました。
本当にありがとうございます。
0102名無しさん@お腹いっぱい。02/01/16 09:04ID:b610iUlz
>>101
関数の中で realloc 使うときはよく注意すること...

int *ptr, *tmp;

ptr =(int *)malloc( sizeof( int ) * 10 );
tmp =(int *)realloc( ptr, sizeof( int ) * 30 );

なとき、ptr == tmp とは限らないので。

void extend( int *array, size_t len )
{
int *tmp;

tmp =(int *)realloc( array, sizeof( int ) * len );
}

とかやってると、はまる。

void *ptr;

ptr =(int *)malloc( sizeof( int ) * 10 );
extend( ptr, 30 );
memcpy( ptr, "hello, world!", 14 ); /* SIGSEGV だったりして */
0103    02/01/16 09:28ID:???
. ∧   ∧
( ´ ・∀・`) へー
0104名無しさん@お腹いっぱい。02/01/16 10:58ID:???
>>102 Call by value って知ってる??
0105名無しさん@お腹いっぱい。02/01/16 15:13ID:LEH3ezMV
>>103
死ね
0106名無しさん@お腹いっぱい。02/01/16 21:07ID:???
バッファの問題、文字コードの問題その他を一気に解決するにはC++.
以降をおすすめします。malloc/reallocおよびポインタ演算は
普段は使わなくなります。オーバーフローもなくなります。

string s;
char ch = 'A';

if (s.size() < LIMIT) s += ch;
0107名無しさん@お腹いっぱい。02/01/19 00:11ID:???
日下部圭子タンがこんなところに・・・・
0108名無しさん@お腹いっぱい。02/02/06 23:01ID:???
救済sage
0109名無しさん@お腹いっぱい。02/02/07 09:50ID:???
>>104
realloc は必ずしも元のアドレスを維持するとは限らないって話なんじゃないの?
なにか勘違いしてると思われ。
0110名無しさん@お腹いっぱい。02/02/17 21:03ID:???
保全sage
0111名無しさん@お腹いっぱい。02/02/18 10:00ID:9k5avLiX
111。
保全ageでもいいんじゃないの?
もっとも、このネタだったら、プログラム板の方がいいかもしれないけど。
0112名無しさん@お腹いっぱい。02/02/18 19:30ID:???
C初心者だけど、挑戦してみようかなぁ・・・
あちこち回って勉強して、ソース書いてここで晒したらアドバイスもらえますかね??
とりあえず参考になるようなとこググって来ます。
0113名無しさん@お腹いっぱい。02/02/18 21:12ID:9k5avLiX
がんばれ
0114名無しさん@お腹いっぱい。02/02/18 21:14ID:???
>>112
Cでコンソールアプリ書けたらCGIは簡単だ。ファイト。
0115名無しさん@お腹いっぱい。02/02/21 09:01ID:???
デバッグ出力をちゃんとファイルに書き出すようにね。
0116nobodyさん02/04/05 13:52ID:???
>>112
同じく。perl知らないしCはまあ読める程度だけどおいらもがんばるよん

・・・って、数カ月ぶりの投稿かよ!あらら。。
0117nobodyさん02/04/07 11:18ID:???
おはつです
CでCGIを書こうと奮闘しているのですが
(鯖はrimnet、OSはFreeBSD Ver.3改)
とりあえず書いたら、IEでは問題ないのだけど
NS4.7/6.2で見ようとするとError500 Internal Server Errorでます
原因がわかりません。
教えてください
ttp://members.tripod.co.jp/mod5/enter.c.txt
0118nobodyさん02/04/07 23:34ID:???
>>117
原因とは関係ないんだけどいくつか

・グローバル変数はグローバルである必要がなさそう
・exit(1);って何で1なのか
・getenv("HTTP_COOKIE")は2度も使う必要はないのでは
・mallocで確保したcookieの領域がfreeされてない
・exit()で終了させる前にヘッダを吐いてないとサーバーエラーになるはず
・コンパイルするとキャスト関係で警告が20個近く出る

そういったところをまず直した方がいいんじゃないかな
011911702/04/08 00:03ID:???
>>118
ありがとうございます
一つずつなおしていきます
0120        02/04/11 15:40ID:SIU7X4Sv
C言語でCGIを作成する時に参考にする良い書籍はないでしょうか?
書店に行っても9割方Perlの本なので・・・。
スレッドも、Perl、Ruby、phpはあるのですが、CのCGIは無かったので。
0121nobodyさん02/04/12 09:56ID:???
何らかのCGI本「CGIとは何か」を学べば、実のところ言語なんて関係ない。
0122nobodyさん02/04/12 09:56ID:???
失敬
s/何らかのCGI本/何らかのCGI本で/
0123nobodyさん02/04/12 15:52ID:???
>>120
C言語の本があれば特に問題ないかと
本で読むより検索で調べたほうが速いと思うので(タダだし)
「C言語 CGI」でgoogleにかければ出てきたような気がする
0124nobodyさん02/04/13 03:12ID:???
>>120
既出だと思うけど
http://www2k.biglobe.ne.jp/~motoi/cdecgi.html
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/
上の2つ+C言語の本1冊で作れるようになるはず。
URLデコードと文字列操作がperlよりも面倒なんだけど、それができ
ればまぁ大丈夫だと思う。
0125nobodyさん02/05/02 00:48ID:4Q8ZAUDc
>>1
前スレ
http://tako.2ch.net/test/read.cgi?bbs=perl&key=971762830

って、404 になるんですが、前スレはどこですか?
0126nobodyさん02/05/02 00:50ID:???
ばーか
0127nobodyさん02/05/02 01:08ID:3IS6vFPb
>>125
http://tako.2ch.net/perl/dat/971762830.dat
012812502/05/02 05:01ID:???
>>127
ありがとう。html になってから読みに行きます。

012912502/05/02 06:07ID:???
っと、思ったら .dat でも読めますね。
フォーマットも簡単そうだし、自分で整形してみます。
0130void()02/05/02 07:09ID:???
CでCGIつくるのとperlで作るのどっちがいいの?
0131nobodyさん02/05/02 08:22ID:???
>>130
一長一短
0132nobodyさん02/05/02 12:26ID:???
こんなスレあったのか。
C言語で頑張るのもいいけど、C++でSTL使うと物凄く楽だよ。

>>130
CもPerlも両方使えるならPerlの方が楽。実行速度以外ではほとんど全ての点で勝ち。
Cは知ってるけどPerlなんてしらねーよって場合はCの方が楽。
ただ、Cが使えるサーバが少ないんだけど。使えても使えるとは書いてないのが普通。
書いてないサーバだと、たとえ使えたとしても使っていいのか管理者に聞いた方がいいよ。

sourceforge.jpは使えるみたいだね。なんか説明読むとめんどくさそうだけど。
0133Perl厨02/05/02 12:53ID:???
実行速度もmod_perlを利用すればそれほど差は無くなるんだよな。
よってPerlの勝ち。

=====終了=====
0134void()02/05/02 16:14ID:???
なるほど。うーん。perlか。
0135nobodyさん02/05/03 02:18ID:DZDxEQpQ
C: 包丁
Perl: 皮剥き器
0136nobodyさん02/05/03 03:23ID:???
日本刀くらいかも>C
日本刀でジャガイモの皮を剥く感じ。
0137nobodyさん02/05/03 03:26ID:???
Cって今どういうのに使われてんの?
0138nobodyさん02/05/03 03:42ID:DZDxEQpQ
>>136
さすがに大げさすぎるでしょ。
せめてサバイバルナイフで髭を剃る、ぐらいで。

>>137
なんでもあるよ。認知度が低いだけだと思う。
GTK, SDL, OpenGL, libxml, あたりで検索してみて。

昨日から CGI 勉強し始めたけど、もうほとんど理解したよ。
スゴク少なかったのね、CGIって。もっと大げさなもんだと思ってた。
このスレが廃れている理由を理解した。(W
0139nobodyさん02/05/03 08:35ID:???
>>137
組み込みシステムとかで現役。
0140nobodyさん02/05/03 08:52ID:???
Cで普通にプログラミングしてる奴には、質問するほどの事がないんだよね。

>>137
意外といまだにCも多いよ。ゲーム系はほとんどC。素人の方がC++使ってる。
あと、組み込み系はコンパイラが無くて仕方なくCだね。
0141nobodyさん02/05/03 09:24ID:???
>>140
C++なんて実装したら貴重なりソースが消滅しません?
0142nobodyさん02/05/03 10:34ID:???
最近Perl止めてC言語勉強し始めたけど、
他の人が言ってるほど難しくないね。結構Perlと
似てるような文法も多いし。
0143nobodyさん02/05/03 10:41ID:???
>>142
だれがCを難しいと・・・?
まぁ、リファレンスわかってればポインタもかろうじてわかるでしょう。
0144nobodyさん02/05/03 12:27ID:???
グループウェアの CGI で、Perl でプロトタイプつくって、
Perl だとソースでちゃうし、インストールがややこしいので、
C で書きなおして、オブジェクトで販売してるって話聞いたけど、
みんなそんなことしてるの?
0145nobodyさん02/05/03 12:41ID:???
( ´_ゝ`)
0146nobodyさん02/05/03 22:50ID:???
>>142
わかりにくいのはポインタと構造体だけだと思うけどね・・・
0147nobodyさん02/05/04 12:33ID:???
>>146
ポインタはともかく構造体って難しい?
0148nobodyさん02/05/04 17:55ID:???
構造体は以外と詰まる人が多いみたいよ。
好きに作れちゃうところがかえって混乱しやすいみたい。
014914602/05/04 18:02ID:???
>>147
自分が詰まったところです。。。
0150 02/05/04 22:45ID:???
アセンブラに比べれば極楽だよ。
あははは(゚д゚)
0151nobodyさん02/05/04 23:53ID:???
じゃあ、共用体とか言ったらパニック?
0152nobodyさん02/05/05 13:43ID:???
構造体は難しいというより、初心者には使い道がわからないと思う。
共用体は実装の都合とかの、どちらかというと汚い部分で必要になるから、
初心者に教える必要ないよなぁ。エンディアンに依存しないプログラムを
書く場合なんかには便利なんだが。
0153nobodyさん02/05/07 18:11ID:iiKjSr3S
>>138
ソースうp汁!
0154nobodyさん02/05/08 11:03ID:???
>>148
実用的なプログラムを組もうとすると、構造体にもポインタを使うから、理解が進まないうちは、
エラーメッセージが出てもどう対処してよいかわからない、ということでは?
0155nobodyさん02/05/11 11:01ID:???
C&Perl 5によるCGI入門

http://www.amazon.co.jp/exec/obidos/ASIN/4795296960/qid=1021082069/br=1-12/ref=br_lf_b_12/250-0136950-8331429
0156nobodyさん02/07/17 12:01ID:???
>>155
アジソン・ウェスレイはいい本出してるなぁ。
0157nobodyさん02/08/02 00:19ID:???
age
0158nobodyさん02/08/05 00:11ID:mlKhZTXH
ファイルポインタを使って円の面積を計算するプログラム、教えてください。
ファイルポインタには半径1から10の数値があります。
出力結果は次のようになるようにして下さい
半径 面積





10

0159nobodyさん02/08/05 00:30ID:???
>>158
マルチはうせろ!
0160nobodyさん02/08/05 03:29ID:???
課題は自分でやろうね。
0161nobodyさん02/08/13 16:54ID:???
うーん活気がない。やはりPerlに押されっぱなしか。
しかし暗号のような変数を多用するPerlに不快感を感じる人には
それほど悪い選択ではないと思うが。
0162nobodyさん02/08/13 17:18ID:???
>>161
この辺がCの限界って感じ?
0163nobodyさん02/08/13 17:21ID:???
>>161
暗号のような変数を多用するPerlの方がわかり易い体なのでCのほうが実は不快。
0164nobodyさん02/08/13 17:31ID:???
うちの鯖Cコンパイラが使えないんだよなぁ・・(鬱
0165nobodyさん02/08/14 11:37ID:???
文字が中心であるWWWにおいて、
つねに「文字列の扱いには難がある」と評されるCが使いづらいのは、
当然といえば当然だな。
0166nobodyさん02/08/14 12:29ID:???
ライブラリ使わないからだろ
素のCなんか使ってられるかよ
精気表現もガベコレもstringライブラリも有る
つーか++ならSTLが有るだろ
0167nobodyさん02/08/14 21:11ID:???
C言語でつくるCGI入門って本出てたけどどう?買った人いる?
0168nobodyさん02/08/15 12:00ID:???
普通のCで質問なのですが、FtpCommand関数を使ってサーバーにあるファイルの
パーミッションをゲットするにはどうすればいいのでしょうか?
0169nobodyさん02/08/15 15:00ID:???
>>166
そう、そこだ!長年ため込まれてきた遺産が、不当に低く認識されている!
膨大なライブラリを活用すればC/C++でも自由なウェブプログラミングができる!
さて
>  精気表現もガベコレもstringライブラリも有る
ということなので、みなさんの知っているウェブプログラミング向けライブラリを
知らせあいましょう。
0170nobodyさん02/08/15 18:49ID:???
>>168
ちょっと返事がないからってスレ立てるなヴォケ。逝ってよし
0171nobodyさん02/08/15 18:55ID:???
>>168
まず立てたスレの削除依頼を出してこい。その後なら答えてやらんこともない。
0172nobodyさん02/08/15 19:06ID:???
CGI で学ぶ C++
http://www.matsusaka-u.ac.jp/~okumura/cplusplus/
0173nobodyさん02/08/16 00:03ID:???
>>170-171
知らねー奴に聞いてねーYO
0174nobodyさん02/08/16 00:08ID:???
まず立てたスレの削除依頼を出してこい。その後なら答えてやらんこともない。
0175nobodyさん02/08/16 04:26ID:???
>>169
取りあえず、知ってるのだけ

ガベコレ
http://www.hpl.hp.com/personal/Hans_Boehm/gc/

Perl5コンパチ精気氷原ほか
http://www.hi-ho.ne.jp/babaq/index.html

つーかC LIBRARYでぐぐればゲソゲソ出て来るよ
0176nobodyさん02/08/19 11:40ID:???
Cでメーラーもどきを作っているのですが、そこでちょっと質問
受信したメールの日時は
「Date: 13 Feb 2002 15:26:45 +900」の行でいいと思うのですが、
これが、下のように
「Date: 13 Feb 2002 15:26:45 -0000」ってなっているばあいは
時間が違うみたいなのですが、これはどういうことなのでしょうか?
日時を正しく取得する方法を教えて下さい。
0177nobodyさん02/08/20 17:23ID:0juDwDMi
タイムゾーンが、UTC(GMTか?)になっているってことですよね?
そのまま9時間足して、JSTでそろえるようにすればいいんじゃないですか?
簡易メーラーなら。
0178nobodyさん02/08/21 01:11ID:6KjI3tpo
>>167
> C言語でつくるCGI入門って本出てたけどどう?買った人いる?

これ、絶対に買ってはいけません。

サンプルコードがバッファオーバーフローのことを全く考えていないんで、
この本を参考に作ったサイトはあっという間にクラックされちまいますよ。

# 即刻、廃刊にしる!!
0179nobodyさん02/08/21 13:41ID:???
入門書籍ってのはそういうもんだ。
サンプルコードは本質がボケないように、極端にシンプルにする必要がある。

マニア向けなら違うけど。


とは言っても最低限注意書きなりは欲しいけどな。
0180nobodyさん02/08/23 15:30ID:???
いや、このご時世では、セキュリティに配慮のないサンプルは
サンプルとはいえないでしょ。
ここを強調表示して、CSS使って、...よりも、セキュリティ対策のためには
どういう点を厳守すべきか、そういうことを本にするんじゃないのか?
その本にバッファオーバーフローの危険があるのが本当なら、絶対買うのはやだな。

# 廃刊にしる!!
018117902/08/28 18:03ID:???
じゃぁ入稿よろしく。
018217802/09/01 15:37ID:???
>>179
> 入門書籍ってのはそういうもんだ。
> サンプルコードは本質がボケないように、極端にシンプルにする必要がある。

長さチェックを全く行なわずに
strcpy(buffer, getenv("QUERY_STRING"));
なんてことをするコードが何の注意書きもなく載っている本が
入門書としては最適なのですか?
0183nobodyさん02/09/02 20:45ID:???
そーじゃなくてさ、「CでCGI入門」みたいな書籍で全て説明する必要は無いし、
その書籍だけで全てを知ろうとするのがそもそもの間違と信じている。

餅は餅屋。内容が重複してちゃ存在価値が薄れるじゃん。
必要なら「C言語」を学習するための本。
「CGIを使う」を学習するための本。
「Cのセキュリティ上の落とし穴」を学習するための本、
を夫々読むのがスジじゃないかな。

ってゆーか今の子ドキュメン読まなさすぎ。
■ このスレッドは過去ログ倉庫に格納されています