トップページ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
0002続・元スレ2001/05/04(金) 05:01ID:Sv87XwuU
138 名前:むぎ茶 投稿日:2001/04/26(木) 08:18
http://www.mietsu.tsu.mie.jp/freak/index.shtml
CGIというよりPerlみたいなもの?
139 名前:名無しさん 投稿日:2001/04/26(木) 16:48
>>138
TOPページが異様に重いんでやめちゃった。
何のサイトなの?
140 名前:名無しさん 投稿日:2001/04/26(木) 17:36
CGIというよりPerlみたいなもの?<意味不明
141 名前:名無しさん 投稿日:2001/04/28(土) 10:34
>>138
これとC言語と何の関係が?重いので自分も途中でやめたが・・・
---------------------------------------------------------

http://www.mietsu.tsu.mie.jp/freak/freakgarden.shtml
にC++のCGIあるよ。
0003名無しさん@お腹いっぱい。2001/05/07(月) 01:25ID:Vdb34f9c
STLを使えば連想配列を作れるって雑誌で読んだのだが、
実際にCGIで使ってる人っているのかな?
0004名無しさん@お腹いっぱい。2001/05/07(月) 04:01ID:lCHmlcCs
Perlの自作掲示板をC++に書き換えたわずかな経験しかないけど、
STL(というかSTLを含むC++標準ライブラリ)は、むっちゃ便利だよ。

ただし正規表現の処理はちょっと面倒みたい。
flexなんかが使える人なら、もっと楽にできると思うのだが、
おれはflexのfの字も知らないので、元のPerlスクリプトから
正規表現をできるだけ減らして、あとは単なる文字列置換で
切り抜けました。
0005名無しさん@お腹いっぱい。2001/05/10(木) 17:29ID:???
みんなそんなに正規表現使ってるんでしょうか。
作るものによるのでしょうけど。

C++は開発環境が圧倒的に整っているのがいいですね。
統合環境でソースレベルデバッグ、ローカル変数を覗くのも簡単だし。
簡単なCGIなら、手軽にPerlで十分ですけど。
0006名無しさん@お腹いっぱい。2001/05/10(木) 21:43ID:8zuGcixU
>>5
統合環境について同意。
おれもVC++6でデバッグしてます。
でもサーバのgccが古くてSTLがダメダメだったりしないですか?
最新版のgccとlibstdc++をいれればいいとは思うんだけど
面倒でやってない。
0007名無しさん@お腹いっぱい。2001/05/11(金) 11:36ID:0Xa628kc
>おれもVC++6でデバッグしてます。
>でもサーバのgccが古くてSTLがダメダメだったりしないですか?

わー、同じやり方の人がいて嬉しい。
サーバのgccは、2.95以降が無ければ自分でいれます。
2.70だと使い物にならないよね。
0008名無しさん@お腹いっぱい。2001/05/12(土) 11:25ID:4BHhF8Kc
C++使いたいけど、なぜかサポートしてくれるISPが少ないような?
000962001/05/12(土) 14:46ID:9XwDBRCc
>>7
やっぱ古いSTLのままじゃだめっすよね。
素直に今からgcc2.95入れます。

gccのサイトを見ると、C++標準ライブラリの最新版がgcc本体と
別にあるみたいなんですが、=> http://gcc.gnu.org/libstdc++/
これも入れたほうがいいんでしょうか?

>>8
ISPがLinuxとかなら、ローカルに同じ環境を作ってコンパイルして
実行ファイルだけ上げるとか・・・。今度試してみます。
0010名無しさん@お腹いっぱい。2001/05/13(日) 04:10ID:ZfAWLiIw

fprintf( log, "REMOTE_HOST....%s <br>", getenvs( "REMOTE_HOST" ) );
fprintf( log, "REMOTE_ADDR....%s <br>", getenvs( "REMOTE_ADDR" ) );
fprintf( log, "REMOTE_PORT....%s <br>", getenvs( "REMOTE_PORT" ) );
0011名無しさん@お腹いっぱい。2001/05/13(日) 04:15ID:ZfAWLiIw
fprintf( log, "REMOTE_HOST....%s <br>", getenvs( "REMOTE_HOST" ) );
fprintf( log, "REMOTE_ADDR....%s <br>", getenvs( "REMOTE_ADDR" ) );
fprintf( log, "REMOTE_PORT....%s <br>", getenvs( "REMOTE_PORT" ) );

このようなソースでアクセス解析を行ったのですが、REMOTE_HOSTだけが
取得できません、どうやら特別な操作が必要なようですが自分にはさっぱりです。
良ければ誰かどのようにしてREMOTE_HOSTを取得するのかソースで教えてくれませんか?
0012112001/05/13(日) 04:19ID:ZfAWLiIw
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/index.html
此処のページがとても有意義です。
0013112001/05/13(日) 04:21ID:ZfAWLiIw
char *getenvs( char *str )
{
char *ev = getenv( str );
if( ev == NULL ) { ev = "none"; }
return ev;
}
さっきから多重投稿ですいません。
11のソースで使われている関数です。
0014名無しさん@お腹いっぱい。2001/05/13(日) 05:06ID:???
>>11
マルチポスト野郎は死ね。

って事でこういう馬鹿には答えない方針でいきませう。>おおる
0015名無しさん@お腹いっぱい。2001/05/13(日) 05:48ID:???
>>14
確かにマルチポストだ。レンサバ板の旧スレッドにも書いてる。

>>11
これに答えると今後しめしがつかないから。悪いね。
まあ簡単にできるんで調べてみれ。
0016名無しさん@お腹いっぱい。2001/05/13(日) 16:29ID:lOGH6AnI
>ISPがLinuxとかなら、ローカルに同じ環境を作ってコンパイルして
>実行ファイルだけ上げるとか・・・。今度試してみます。

基本的にこれだと思うけど、perlのCGIは許可しても、バイナリの実行は
許可しないISPもあると聞いたので注意。
Apacheとかそういう設定できたっけ?
バイナリでも拡張子を .pl にしたら実行できちゃったりして。
0017名無しさん@お腹いっぱい。2001/05/13(日) 16:31ID:lOGH6AnI
↑バイナリでも拡張子を .pl にしたら実行できちゃったりして。

外部のperlを呼び出してるならともかく、mod_perlみたいに組み込まれた
物だったら強制的にperlスクリプトとして処理されるか。
0018112001/05/13(日) 16:36ID:bVNqra6E
さっきは本当にすいません、十分に反省しました。

struct hostent *hptr;
hptr = gethostbyaddr( (char*)getenv( "REMOTE_ADDR" ), 4, AF_INET );
printf( "Content-type: text/plain\n\n" );
printf( "%s<br>", hptr->h_name );

何とか自分で調べて gethostbyaddr関数を使えばよいと
いうところまでは解りました。
ただ上のソースでコンパイルエラーはでないのですが
実行エラーがでてしまいます。
どうやら gethostbyaddr関数の使い方が悪いようなのですが。
自分には一番目の引数以外、gethostbyaddr関数の意味が分かりません。
もう二度とマルチはいたしませんので
どうか gethostbyaddr関数の引数、戻り値の意味と使い方を教えて下さい。
ついでにヘッダーファイル名も教えてもらえませんか。
解らないので、すべてのヘッダーを羅列しているのです。
0019名無しさん@お腹いっぱい。2001/05/13(日) 21:53ID:???
>>18
その素直さと、gethostbyaddrを自力で見つけてきた努力を
評価して答えさせてもらいます。いいですね>ここの住人

gethostbyaddrの第1引数は、IPアドレスを4バイトにパックしたもの。
たとえば"127.0.0.1"というIPアドレスなら
char addr[4]={0x7F,0x00,0x00,0x01};
↑このような4バイトのchar配列にして渡せばよい。

"127.0.0.1"のような文字列と、4バイト形式のIPアドレスを
相互に変換するinet_aton、inet_ntoaという関数もある。
ただし歴史的な事情で、これらの関数では、4バイト形式のIPアドレスを
in_addrという構造体で表すので注意。(たいていここで混乱する)

"127.0.0.1"などの文字列形式を4バイトにパックするために、
gethostbynameやgethostbyaddrの戻り値を利用してもよい。
たとえば、こんな感じ。

struct hostent *hptr;
hptr = gethostbyname( (char*)getenv( "REMOTE_ADDR" ) );
hptr = gethostbyaddr( hptr->h_addr, hptr->h_length, hptr->h_addrtype );
printf("%s", hptr->h_name);

これは最初のgethostbynameでhptrのh_addr、h_length, h_addrtypeを
取得し、それを使って今度はgethostbyaddrを呼ぶことで、h_nameを
取得しているわけ。

手元のFreeBSDでは、必要なヘッダはsys/types.hとnetdb.hだった。
これはOSによって違うかも?
そのへんは man gethostbyaddrでわかるんじゃないかな。
0020112001/05/14(月) 02:59ID:r0Z2G3wg
>>19
なんとか、出来ました。
こんな自分にも、わざわざ教えて下さって本当に感謝します。
そしてこれからも精進していこうと思います。
0021名無しさん@お腹いっぱい。2001/06/24(日) 18:36ID:65Gxh8rs
gcc-3.0が出たよ。
http://gcc.gnu.org/gcc-3.0/gcc-3.0.html
libstdc++の最新版も入ったそうなのでSTLがまともになってることを期待。
0022名無しさん@お腹いっぱい。2001/06/25(月) 00:32ID:pEls8e6Q
掲示板を作ってみたんですけど、入力文章に"「"、"」"があると止まってしまいます。なんででしょ?
0023名無しさん@お腹いっぱい。2001/06/25(月) 01:23ID:k5UlKqNo
<form method='POST' action="http://aaa/ssss.cgi">
<input type=hidden name="get" value="143242341324">
<input type=submit value="abcd">
</form>
これをTELNETで見ようと思ってもサッパリ分かりませんでした
いま将棋とオセロにはまってます
このCGIの出力結果を見るにはどんな文ををサーバーに送れば見ることが出来ますか?
詳しく分かりやすく専門用語を使わずに教えてくださいおしえてください
0024名無しさん@お腹いっぱい。2001/06/25(月) 09:52ID:???
>>23 氏ね
0025>>232001/06/25(月) 15:41ID:???
オセロと将棋って何か関係あんの?
0026名無しさん@お腹いっぱい。2001/06/26(火) 21:35ID:euzbuCB2
>>23 はバカだねえ
0027名無しさん@お腹いっぱい。2001/06/30(土) 18:41ID:???
スマソ、まったくCは素人なんだがLinuxのGCCだけで作れるものなのか?
Windowsだと金かかるのか?
初心者向けサイトにもその辺りは何にも書いてないぞ(^^;
0028名無しさん@お腹いっぱい。2001/06/30(土) 19:19ID:fH7f8wxQ
>>27
C言語でCGIを作るなら、WEBサーバと同じOS環境が必要だよ。
たとえばLinuxのGCCで作ったCGIをアップするなら、
そのCGIを置くWEBサーバもLinuxじゃないと動作しない。
WindowsのVC++とかで作ったCGIは、Windowsサーバじゃないとだめ。
0029七資産2001/07/01(日) 01:20ID:???
>>27
基本はwebサーバにftpでソースファイルを送ったあと、
telnetでログインしてコンパイルする。

Cコンパイラにどういうものを用意してくれているかは
ISPに聞いてくださいな。そこまではさすがに面倒
見きれない。
0030272001/07/01(日) 13:05ID:???
ありがとう、サーバーがLinuxだからそのままでよさそうでした
0031JAPU2001/07/01(日) 19:23ID:???
クロスコンパイル環境整えればどんなOS用でもOKという話もあり。
(面倒だけど。)
0032名無しさん@お腹いっぱい。2001/07/01(日) 19:39ID:n8uZvlf2
Windowsで動くクロスコンパイル環境ほしいー。

てゆーかGCCだとSTLのヘッダを読み込むのが遅くて困ってます。
VC++みたいなヘッダのプリコンパイル機能ってあります?
gccのマニュアルざっとみたけど見つからないの。。。
0033名無しさん@お腹いっぱい。2001/07/02(月) 01:20ID:7DkK5h6g
で、C++を使える鯖ってどっかある?
0034名無しさん@お腹いっぱい。2001/07/02(月) 02:19ID:???
>>33
ローカルでコンパイルすればいいじゃん。
まあサーバにC++関連のsharedライブラリが入ってないつー
場合もあるけど、そんなときはstaticリンクで乗り切れ。
0035名無しさん@お腹いっぱい。2001/07/03(火) 20:23ID:???
っつーかC/C++言語でCGIを書く奴はふつー自前サーバ。
仕事なら当然だが、趣味でも最近はみんな自前サーバ立ててるな。
おれもそうだ。
0036名無しさん@お腹いっぱい。2001/07/04(水) 23:58ID:RFlJOQ32
んー。flexか。ちと研究してみよっかな。
0037名無しさん@お腹いっぱい。2001/07/05(木) 00:09ID:M8XJRojU
GNU regex.c というものもあるのね。
誰か使った人いる?
0038弐ch編者2001/07/06(金) 21:14ID:???
晒し上げ
0039JAPU2001/07/06(金) 22:25ID:???
GNU のやつはしらんが、BSD 由来の方は使ったことある。
とりあえず、あまり参考にならないと思うけど輪講用に適当にでっち上げたもの:
http://www.japu.org/tmp/http.c

httpd.c の方はあまりにも汚くなったので捨てました。
0040名無しさん@お腹いっぱい。2001/07/10(火) 18:49ID:???
ちょっと質問です、CでCGIを作ろうと思ったんですがCはまったくの初心者
何か便利なモジュールとかってないんですか?
0041名無しさん@お腹いっぱい。2001/07/10(火) 18:56ID:???

とりあえず共用鯖では絶対に動かそうと思うなよ。
0042名無しさん@お腹いっぱい。2001/07/10(火) 19:20ID:???
↑なんでだよ。
許されている物を動かして、鯖が止まったならば鯖缶の責任。
0043名無しさん@お腹いっぱい。2001/07/10(火) 20:26ID:???

サイアク。
やりたいなら自分の鯖でやれ。
0044名無しさん@お腹いっぱい。2001/07/10(火) 21:53ID:???
すげー理論だ。

だいたいの鯖屋の規約には「運用に支障をきたす」云々が有るから、
鯖が止まるようなものは「許されている物」じゃねーけどな。

つことで結局、いきなり共用鯖では動かさないでね(ハァト
0045名無しさん@お腹いっぱい。2001/07/10(火) 22:09ID:???
>>44
>鯖が止まるようなものは「許されている物」じゃねーけどな。
そうだよね。
バグチェックして、鯖管にソース見せて許可貰えば
共用鯖で動かしてもいいんだよね。
それで落ちたら鯖管の責任。
# そこまで(ソース見せる)しなくてもいいとは思うけど。
# 自鯖で正常に動作すればいいでしょ。
# 責任は自分にあるけど。

と言うことで、>>42に同意。

まあ、
>>40が「いきなり共用鯖で動かす」とも、
>>41が「入念なテストの後に共用鯖で動かすのも駄目」とも、
>>42が「いきなり共用鯖で動かしても良い」とも、
「↑」が何番の発言を指すのか、とも、
全く何処にも書かれていないのですがね。
0046402001/07/11(水) 01:01ID:???
すいません、見てみたら突然こんなことになってまして
ちゃんと自鯖で動かします。
0047名無しさん@お腹いっぱい。2001/07/11(水) 01:14ID:???
># 自鯖で正常に動作すればいいでしょ。
負荷かけまくるのはダメだろ。正常に動いても。

共用鯖はローカルとは違い、他の人も使ってることを忘れずに。
ローカルでは落ちなくても、共用鯖では落ちるって事もあるから。

#負荷大きくないのに落ちたなら、鯖管の負荷計画が拙いって事になるけどね。
0048452001/07/11(水) 15:55ID:???
>>47
>負荷かけまくるのはダメだろ。正常に動いても。
うん、そうだね。
ちなみに、私は共用鯖で負荷かけまくりな物を
動かすような非常識な人間を対象に書いたつもり
じゃないです。
ここ見てる人がそんな非常識な訳がないと思う…
0049名無しさん@お腹いっぱい。2001/07/12(木) 12:43ID:djup2iK6
>>12

12のページかなり必要なネタが網羅されていていいね。
参考にしよう。
0050名無しさん@お腹いっぱい。2001/07/14(土) 16:33ID:gnTS0OVs
この情報ならここに沢山あるよ
変なURLに見えるけど内容は確か。
ttp://members.tripod.co.jp/casinoA1/
0051名無しさん@お腹いっぱい。2001/07/15(日) 23:15ID:???
ざっとCの参考書みてみたけど別に難しくはなさそうだね
参考書に書いてあった
int main(){
/*適当なくだらん処理*/
hoge();
return 0;
}

void hoge(void)
{
/*printfのなんか適当な処理*/
}

ってユーザー定義関数ではしばらくvoidを使いなさいって書いてあったんだが
コンパイルするときにhogeはintにしましょうみたいなエラーがでるんだが・・
実際にvoidを省略するとコンパイル&実行できるんだが。。。
深く考えるのはやめとくか。。。
0052名無しさん@お腹いっぱい。2001/07/17(火) 21:51ID:ZAF8cotQ
session管理age(w
0053JAPU2001/07/18(水) 12:06ID:???
1. エラーメッセージは自分で適当に解釈せず、そのまま提示しましょう。
2. プロトタイプ宣言しないと int hoge(); と見なされちゃうというお約束。
3. というか、printf 使うなら #include <stdio.h> 必要では?
0054名無しさん@お腹いっぱい。2001/07/19(木) 18:58ID:???
#include <stdio.h>
#include <math.h>

void amount(int kingaku,int nensuu,float riritu)
{
int i;
printf("金額%d円\n%d年返済\n利率%f%\n",kingaku,nensuu,riritu);

for(i = 0;i <= nensuu;i++)
{
printf("%3d 年後の元利合計 = %.0f 円\n",i,kingaku*pow((1+(riritu/100)),(i+1)));
}
}

int main()
{
int k;
int n;
float r;

do{
printf("元金の金額は?\n");
scanf("%d",&k);
}while (k < 0);

do{
printf("年数は?\n");
scanf("%d",&n);
}while (n < 0);

do{
printf("利率は?\n");
scanf("%f",&r);
}while (r < 0);

amount(k,n,r);

return 0;

}
0055542001/07/19(木) 18:58ID:???
ごめん、板間違えた
0056わ、2001/07/20(金) 03:38ID:O.8zSDuM
age
0057名無しさん@お腹いっぱい。2001/07/21(土) 10:24ID:???
あげましょうか?
0058名無しさん@お腹いっぱい。2001/07/21(土) 12:43ID:Jr0QyeiQ
Cでフォームのデコードってどうやるですか?
0059名無しさん@お腹いっぱい。2001/07/21(土) 13:49ID:HkjrzmP.
>>58

please see >>12
0060JAPU2001/07/21(土) 16:14ID:???
>>58
手前みそであれだが、こんなのもあるぞ。
http://www.japu.org/tmp/parse_query_sample.c

# フォームのデコードってURIのアンエスケープのこと言ってるんだよね?
0061名無しさん@お腹いっぱい。2001/07/23(月) 12:27ID:???
>>60のページ開けん(^^;

ところで、CでCGIってマイナーなんすかね?
>>12のページ以外でまともに解説してるサイトも文献も見つかりませんが
0062JAPU2001/07/23(月) 14:22ID:???
すまん、いまメンテ中。夕方まで待て。

一般的にCで書くと、効率はある程度上がるが思いっ切りコストがかかるからね。(Perl とかと比べて。)あと、C が使えればあとは「CGIの知識」だけで使えるから、特に「CでCGI」の解説は不要説もあり。
0063612001/07/23(月) 15:12ID:???
まってます(わら

確かにCを昔からやっていらっしゃる方には必要ないかもしれませんね
おいらのようにperlから入ってきて最近Cを学んでるものにとって
はなかなか難しいです。
必要なCGIの知識が多少あるのでそれでもまだ良い方なのでしょか?
perlでは簡単に出来たことが。。。ブツブツとは思いますが
必要な関数が揃ってしまえばCの方が楽なのかもしれませんね。
0064名無しさん@お腹いっぱい。2001/07/23(月) 16:08ID:???
厨房な質問失礼

>>12のサイトで半角カナを全角に変換する関数がありますが
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html

ものすごく厨房なんですが、これの引数ってなにを入れればいいんですか?
0065JAPU2001/07/23(月) 16:11ID:???
目的が高速化なら、mod_perl / SpeedyCGI あたりを使うのが吉かもしれない。C言語にこだわるのは理由があるのだろうか...

とりあえずこっちにも置いたので、お急ぎならどうぞ:
http://www.aist-nara.ac.jp/~yasuyu-h/tmp/parse_query_sample.c
0066名無しさん@お腹いっぱい。2001/07/23(月) 17:42ID:uM3WiVLU
ボスから「Cで CGI書いて」と言われたのでー。逆らえない……
0067名無しさん@お腹いっぱい。2001/07/24(火) 12:07ID:???
>>64
ざっと見てみたが、コード変換後にそのコード用の関数を使用するみたい
なんで一通り漢字変換処理が終ってから使用すると思われ。
引数は1個目が頭1バイト、2個目が二つ目の1バイトだと思いますが
0068名無しさん@お腹いっぱい。2001/07/24(火) 12:19ID:.J0xIpNM
cgi経由でjpeg画像等を表示するのを巧くできますか?

http:www.hoge.com/hoge.cgi
でランダムに画像表示させたいのですが・・・・・

サイズが5KB程度の使い物にならない小さいファイ筆はできるのですが
10KBを超えるとうまくいきません。
原因はなんでしょうか?
0069名無しさん@お腹いっぱい。2001/07/24(火) 12:32ID:???
>>68
なぜその質問をこのスレに?

Content-type: image/jpeg

でも最初に吐き出してみれ
0070名無しさん@お腹いっぱい。2001/07/24(火) 15:29ID:???
FORMから取ってきた半角カナ文字の処理に困ってます。

>>64さんと同じ状態で
>>67さんの言われるようにやったつもりですがダメでした。

お手数ですがサンプルなどを示していただけませんでしょうか?
0071名無しさん@お腹いっぱい。2001/07/24(火) 15:32ID:???
「半角カナの処理」とやらで何がしたいのかサパーリなので誰も答えられな
いと思いますが
0072名無しさん@お腹いっぱい。2001/07/24(火) 15:44ID:4bcQgJxI
FORMタグでブラウザから送信されたデータをファイルに保存する
ということでいいのだろうか?>>70

すると半角カナの処理というものは

1.半角カナが表示できないよ どうしよう ウエンウエン
2.半角カナを全角カナに変換したいけどできないよ ワーン
3.半角カナの入力があった場合「半角だゴルァ!!」と表示させるぞ ゴルァ!!

さて、どれでしょう?

密かにどれでもないことを期待する。
0073702001/07/24(火) 18:50ID:???
SJISの半角カナを全角カナに変換したいのです。
それ以外にバケない方法があれば教えていただければ幸いです。
0074772001/07/24(火) 20:55ID:???
>>66
lex使うと正規表現扱うのがラクだYO!
0075名無しさん@お腹いっぱい。2001/07/25(水) 15:39ID:???
http://www.ra.sakura.ne.jp/~sabre/Pecker/Source/index.html

少なくとも2人はいらっしゃると思われる半角カナファンのかたへ
こういうページは見られましたか?
0076名無しさん@お腹いっぱい。2001/07/25(水) 22:14ID:sJbBeL9c
C言語でコンパイルしたhoge.exe実行ファイルを実行するとメモリエラーがでてhoge.exe.stackdumpが生成されます。
私はアセンブリを全く知らないのでこのhoge.exe.stackdumpの内容を理解する事ができません。
メモリ操作が間違ってるのだとは思いますが・・・・・
どなたかこのファイルが何を教えてくれているのか教えてください。

Exception: STATUS_ACCESS_VIOLATION at eip=00401197
eax=00000000 ebx=00000004 ecx=0254FA7C edx=00000000 esi=6107D0E8 edi=00000000
ebp=0254F818 esp=0254FAD0 program=E:\APACHE\CGI-BIN\HOGE.EXE
cs=0167 ds=016F es=016F fs=4CB7 gs=0000 ss=016F
Stack trace:
Frame Function Args
0254F818 00401197 (00000000, 00000000, 00000000, 00000000)
0254FBFC 00401197 (00000001, 04580998, 04580008, FFFFFFFE)
0254FD88 61003859 (00000000, 00000000, 4D448DCE, 00000002)
0254FDB8 61003A3D (00401064, 00000000, 81952E1C, 00000000)
0254FDD8 61003A7C (00000000, 00000000, FFFFFFFF, 00000001)
0254FE08 00406063 (00401064, 0254FC8C, BFFC9490, 0254FF68)
0254FE38 0040103D (00000000, 81952BB8, 00540000, 6C696B53)
0254FF78 BFF8B6E6 (81952DD8, 00000008, 81952BB8, 00000000)
893210 [main] hoge 1744003 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
912544 [main] hoge 1744003 handle_exceptions: Error while dumping state (probably corrupted stack)
0077名無しさん@お腹いっぱい。2001/07/26(木) 11:38ID:???
ダンプ見せられて分かる人の方が珍しい。
ふつーはソースみるかデバッガ使うかする。
0078名無しさん@お腹いっぱい。2001/08/06(月) 16:54ID:???
上記の方でいろいろされていらっしゃいますが、URIデコードで半角カナ文字
を全角カナ文字に変換までしてくれる関数はありませんか?
0079名無しさん@お腹いっぱい。2001/08/06(月) 17:13ID:???
デコードしたあとでjcode使ったらどうよ?
0080名無しさん@お腹いっぱい。2001/08/06(月) 19:40ID:???
>>76
とりあえずMAPファイル出してスタックダンプの各行がどの関数か調べなさい
0081名無しさん@お腹いっぱい。01/08/31 02:18ID:wS5jDtEg
Perlで簡単な掲示板を書けるぐらいになって、Cに乗り換えようとしています。
で、多数のテーブルデータ(1000*5ぐらいの項目数)を扱うなら
どのような手法を使うのがもっとも良いでしょうか?
5000個もファイル作ってられないし、適度に項目を連結して保存、
取り出す都度再分解、という手法で良いんでしょうか?
0082 01/08/31 04:10ID:ATY4p6wo
バイナリでも使ってください。
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演算子と組み合わされているのを見てきたのに
いまいち良くわかっていなかったのですが、ようやく理解できました。
これから色々試しながら勉強していこうと思います。(もちろんローカルで)
勉強になりました。
本当にありがとうございます。
■ このスレッドは過去ログ倉庫に格納されています