C言語CGI専用スレッド
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/04(金) 04:31ID:???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:Sv87XwuUhttp://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実際にCGIで使ってる人っているのかな?
0004名無しさん@お腹いっぱい。
2001/05/07(月) 04:01ID:lCHmlcCsSTL(というかSTLを含むC++標準ライブラリ)は、むっちゃ便利だよ。
ただし正規表現の処理はちょっと面倒みたい。
flexなんかが使える人なら、もっと楽にできると思うのだが、
おれはflexのfの字も知らないので、元のPerlスクリプトから
正規表現をできるだけ減らして、あとは単なる文字列置換で
切り抜けました。
0005名無しさん@お腹いっぱい。
2001/05/10(木) 17:29ID:???作るものによるのでしょうけど。
C++は開発環境が圧倒的に整っているのがいいですね。
統合環境でソースレベルデバッグ、ローカル変数を覗くのも簡単だし。
簡単なCGIなら、手軽にPerlで十分ですけど。
0006名無しさん@お腹いっぱい。
2001/05/10(木) 21:43ID:8zuGcixU統合環境について同意。
おれもVC++6でデバッグしてます。
でもサーバのgccが古くてSTLがダメダメだったりしないですか?
最新版のgccとlibstdc++をいれればいいとは思うんだけど
面倒でやってない。
0007名無しさん@お腹いっぱい。
2001/05/11(金) 11:36ID:0Xa628kc>でもサーバのgccが古くてSTLがダメダメだったりしないですか?
わー、同じやり方の人がいて嬉しい。
サーバのgccは、2.95以降が無ければ自分でいれます。
2.70だと使い物にならないよね。
0008名無しさん@お腹いっぱい。
2001/05/12(土) 11:25ID:4BHhF8Kc00096
2001/05/12(土) 14:46ID:9XwDBRCcやっぱ古いSTLのままじゃだめっすよね。
素直に今からgcc2.95入れます。
gccのサイトを見ると、C++標準ライブラリの最新版がgcc本体と
別にあるみたいなんですが、=> http://gcc.gnu.org/libstdc++/
これも入れたほうがいいんでしょうか?
>>8
ISPがLinuxとかなら、ローカルに同じ環境を作ってコンパイルして
実行ファイルだけ上げるとか・・・。今度試してみます。
0010名無しさん@お腹いっぱい。
2001/05/13(日) 04:10ID:ZfAWLiIwfprintf( 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:ZfAWLiIwfprintf( log, "REMOTE_ADDR....%s <br>", getenvs( "REMOTE_ADDR" ) );
fprintf( log, "REMOTE_PORT....%s <br>", getenvs( "REMOTE_PORT" ) );
このようなソースでアクセス解析を行ったのですが、REMOTE_HOSTだけが
取得できません、どうやら特別な操作が必要なようですが自分にはさっぱりです。
良ければ誰かどのようにしてREMOTE_HOSTを取得するのかソースで教えてくれませんか?
001211
2001/05/13(日) 04:19ID:ZfAWLiIw此処のページがとても有意義です。
001311
2001/05/13(日) 04:21ID:ZfAWLiIw{
char *ev = getenv( str );
if( ev == NULL ) { ev = "none"; }
return ev;
}
さっきから多重投稿ですいません。
11のソースで使われている関数です。
0014名無しさん@お腹いっぱい。
2001/05/13(日) 05:06ID:???マルチポスト野郎は死ね。
って事でこういう馬鹿には答えない方針でいきませう。>おおる
0015名無しさん@お腹いっぱい。
2001/05/13(日) 05:48ID:???確かにマルチポストだ。レンサバ板の旧スレッドにも書いてる。
>>11
これに答えると今後しめしがつかないから。悪いね。
まあ簡単にできるんで調べてみれ。
0016名無しさん@お腹いっぱい。
2001/05/13(日) 16:29ID:lOGH6AnI>実行ファイルだけ上げるとか・・・。今度試してみます。
基本的にこれだと思うけど、perlのCGIは許可しても、バイナリの実行は
許可しないISPもあると聞いたので注意。
Apacheとかそういう設定できたっけ?
バイナリでも拡張子を .pl にしたら実行できちゃったりして。
0017名無しさん@お腹いっぱい。
2001/05/13(日) 16:31ID:lOGH6AnI外部のperlを呼び出してるならともかく、mod_perlみたいに組み込まれた
物だったら強制的にperlスクリプトとして処理されるか。
001811
2001/05/13(日) 16:36ID:bVNqra6Estruct 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:???その素直さと、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でわかるんじゃないかな。
002011
2001/05/14(月) 02:59ID:r0Z2G3wgなんとか、出来ました。
こんな自分にも、わざわざ教えて下さって本当に感謝します。
そしてこれからも精進していこうと思います。
0021名無しさん@お腹いっぱい。
2001/06/24(日) 18:36ID:65Gxh8rshttp://gcc.gnu.org/gcc-3.0/gcc-3.0.html
libstdc++の最新版も入ったそうなのでSTLがまともになってることを期待。
0022名無しさん@お腹いっぱい。
2001/06/25(月) 00:32ID:pEls8e6Q0023名無しさん@お腹いっぱい。
2001/06/25(月) 01:23ID:k5UlKqNo<input type=hidden name="get" value="143242341324">
<input type=submit value="abcd">
</form>
これをTELNETで見ようと思ってもサッパリ分かりませんでした
いま将棋とオセロにはまってます
このCGIの出力結果を見るにはどんな文ををサーバーに送れば見ることが出来ますか?
詳しく分かりやすく専門用語を使わずに教えてくださいおしえてください
0024名無しさん@お腹いっぱい。
2001/06/25(月) 09:52ID:???0025>>23
2001/06/25(月) 15:41ID:???0026名無しさん@お腹いっぱい。
2001/06/26(火) 21:35ID:euzbuCB20027名無しさん@お腹いっぱい。
2001/06/30(土) 18:41ID:???Windowsだと金かかるのか?
初心者向けサイトにもその辺りは何にも書いてないぞ(^^;
0028名無しさん@お腹いっぱい。
2001/06/30(土) 19:19ID:fH7f8wxQC言語でCGIを作るなら、WEBサーバと同じOS環境が必要だよ。
たとえばLinuxのGCCで作ったCGIをアップするなら、
そのCGIを置くWEBサーバもLinuxじゃないと動作しない。
WindowsのVC++とかで作ったCGIは、Windowsサーバじゃないとだめ。
0029七資産
2001/07/01(日) 01:20ID:???基本はwebサーバにftpでソースファイルを送ったあと、
telnetでログインしてコンパイルする。
Cコンパイラにどういうものを用意してくれているかは
ISPに聞いてくださいな。そこまではさすがに面倒
見きれない。
003027
2001/07/01(日) 13:05ID:???0031JAPU
2001/07/01(日) 19:23ID:???(面倒だけど。)
0032名無しさん@お腹いっぱい。
2001/07/01(日) 19:39ID:n8uZvlf2てゆーかGCCだとSTLのヘッダを読み込むのが遅くて困ってます。
VC++みたいなヘッダのプリコンパイル機能ってあります?
gccのマニュアルざっとみたけど見つからないの。。。
0033名無しさん@お腹いっぱい。
2001/07/02(月) 01:20ID:7DkK5h6g0034名無しさん@お腹いっぱい。
2001/07/02(月) 02:19ID:???ローカルでコンパイルすればいいじゃん。
まあサーバにC++関連のsharedライブラリが入ってないつー
場合もあるけど、そんなときはstaticリンクで乗り切れ。
0035名無しさん@お腹いっぱい。
2001/07/03(火) 20:23ID:???仕事なら当然だが、趣味でも最近はみんな自前サーバ立ててるな。
おれもそうだ。
0036名無しさん@お腹いっぱい。
2001/07/04(水) 23:58ID:RFlJOQ320037名無しさん@お腹いっぱい。
2001/07/05(木) 00:09ID:M8XJRojU誰か使った人いる?
0038弐ch編者
2001/07/06(金) 21:14ID:???0039JAPU
2001/07/06(金) 22:25ID:???とりあえず、あまり参考にならないと思うけど輪講用に適当にでっち上げたもの:
http://www.japu.org/tmp/http.c
httpd.c の方はあまりにも汚くなったので捨てました。
0040名無しさん@お腹いっぱい。
2001/07/10(火) 18:49ID:???何か便利なモジュールとかってないんですか?
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:???>鯖が止まるようなものは「許されている物」じゃねーけどな。
そうだよね。
バグチェックして、鯖管にソース見せて許可貰えば
共用鯖で動かしてもいいんだよね。
それで落ちたら鯖管の責任。
# そこまで(ソース見せる)しなくてもいいとは思うけど。
# 自鯖で正常に動作すればいいでしょ。
# 責任は自分にあるけど。
と言うことで、>>42に同意。
まあ、
>>40が「いきなり共用鯖で動かす」とも、
>>41が「入念なテストの後に共用鯖で動かすのも駄目」とも、
>>42が「いきなり共用鯖で動かしても良い」とも、
「↑」が何番の発言を指すのか、とも、
全く何処にも書かれていないのですがね。
004640
2001/07/11(水) 01:01ID:???ちゃんと自鯖で動かします。
0047名無しさん@お腹いっぱい。
2001/07/11(水) 01:14ID:???負荷かけまくるのはダメだろ。正常に動いても。
共用鯖はローカルとは違い、他の人も使ってることを忘れずに。
ローカルでは落ちなくても、共用鯖では落ちるって事もあるから。
#負荷大きくないのに落ちたなら、鯖管の負荷計画が拙いって事になるけどね。
004845
2001/07/11(水) 15:55ID:???>負荷かけまくるのはダメだろ。正常に動いても。
うん、そうだね。
ちなみに、私は共用鯖で負荷かけまくりな物を
動かすような非常識な人間を対象に書いたつもり
じゃないです。
ここ見てる人がそんな非常識な訳がないと思う…
0049名無しさん@お腹いっぱい。
2001/07/12(木) 12:43ID:djup2iK612のページかなり必要なネタが網羅されていていいね。
参考にしよう。
0050名無しさん@お腹いっぱい。
2001/07/14(土) 16:33ID:gnTS0OVs変なURLに見えるけど内容は確か。
ttp://members.tripod.co.jp/casinoA1/
0051名無しさん@お腹いっぱい。
2001/07/15(日) 23:15ID:???参考書に書いてあった
int main(){
/*適当なくだらん処理*/
hoge();
return 0;
}
void hoge(void)
{
/*printfのなんか適当な処理*/
}
ってユーザー定義関数ではしばらくvoidを使いなさいって書いてあったんだが
コンパイルするときにhogeはintにしましょうみたいなエラーがでるんだが・・
実際にvoidを省略するとコンパイル&実行できるんだが。。。
深く考えるのはやめとくか。。。
0052名無しさん@お腹いっぱい。
2001/07/17(火) 21:51ID:ZAF8cotQ0053JAPU
2001/07/18(水) 12:06ID:???2. プロトタイプ宣言しないと int hoge(); と見なされちゃうというお約束。
3. というか、printf 使うなら #include <stdio.h> 必要では?
0054名無しさん@お腹いっぱい。
2001/07/19(木) 18:58ID:???#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;
}
005554
2001/07/19(木) 18:58ID:???0056わ、
2001/07/20(金) 03:38ID:O.8zSDuM0057名無しさん@お腹いっぱい。
2001/07/21(土) 10:24ID:???■ このスレッドは過去ログ倉庫に格納されています