トップページphp
708コメント194KB

C/C++ CGIスレッド

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/02/26 08:58ID:GDAQuNNS
C言語CGI専用スレッド
http://pc2.2ch.net/test/read.cgi/php/988918264/

C/C++ CGI 専門のスレッドです。

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

http://cgi.resourceindex.com/Programs_and_Scripts/C_and_C++/
http://www.cgifiles.com/scripts/cc++/index.shtml

前スレ
http://pc2.2ch.net/test/read.cgi/php/988918264/
0043nobodyさん04/03/12 11:09ID:???
>>42
FreeSBIEとかいうやつ?
0044nobodyさん04/03/12 11:36ID:???
>>43
http://livecd.sourceforge.net/
http://www.freesbie.org/
http://www.netboz.net/

漏れはひとつめのLiveCDというのを使った
aaacafeで動いてる
libc(?)以外のライブラリは静的リンクにしてある

% ldd hoge.cgi
hoge.cgi:
libm.so.2 => /usr/lib/libm.so.2 (0x28091000)
libc.so.4 => /usr/lib/libc.so.4 (0x280ad000)

linuxだとgccやglibcのバージョンに気をつけて選ぶといいかもしれない
0045nobodyさん04/03/12 17:02ID:???
>>42-44
試してみます。ありがとうございました。
0046nobodyさん04/03/14 14:00ID:???
Lindowsじゃ無理?
0047nobodyさん04/03/14 14:37ID:???
>>46
個々のdistroの詳細は板違いなので
Linux板のdistro比較のスレなどを見たほうがいいかも

とりあえずこのへんをチェック
http://www.distrowatch.com/
http://www.distrowatch.com/table.php?distribution=lindows
0048nobodyさん04/03/14 22:45ID:???
CでCGI書くとき、filelockはどうやってます?
0049nobodyさん04/03/14 23:13ID:???
fcntl
0050nobodyさん04/03/15 08:03ID:???
http://pc.2ch.net/test/read.cgi/linux/1077124382/221
あのキモヲタがゴリゴリCでCGIを書く時のライブラリを作っているらしい。
0051http:// FLA1Aah099.kyt.mesh.ad.jp.2ch.net/04/03/15 09:04ID:???
guest guest/98
0052nobodyさん04/03/16 00:14ID:???
>48
mkdir
0053nobodyさん04/03/16 13:40ID:???
flock()
0054nobodyさん04/03/16 23:46ID:???
fcntl(2)
flock(2)
lockf(3)
0055nobodyさん04/03/18 02:03ID:???
resize.plの C版みたいなの知りませんか?
ここ検索すれとか、何か情報キボン。

いちおうググってみたいけど、ロクなのが見つからない・・・ OTL
0056nobody5504/03/18 02:04ID:???
みたいけど

みたけど
0057nobodyさん04/03/18 17:25ID:???
ロクなのが見つからない
0058nobodyさん04/03/21 00:25ID:NzuooVWx
いかりや長介さん、亡くなっちゃいましたね。
ご冥福をお祈り申し上げますです。
0059nobodyさん04/03/21 00:45ID:???
それはいいが
なぜこのスレに書き込んだのかが、大きな問題だ。
0060nobodyさん04/03/21 00:47ID:h03qa3k8
>   【訃報】いかりや長介さん逝去
> すばらしい笑いと、円熟の演技を与えてくれたいかりや長介さ
> んが亡くなりました。
> ご冥福をお祈りします。
>
> なお、現在news系のサーバはアクセス過剰で繋がりにくくなっ
> ています。
> いかりやさんを偲ぶのには以下の板をご利用ください
> http://live8.2ch.net/livesaturn/
> http://live10.2ch.net/livevenus/
0061nobodyさん04/04/01 03:11ID:???
http://acpp.sourceforge.jp/
こんなの見つけた
0062nobodyさん04/04/01 22:19ID:???
>>61

説明ド下手糞な気がするんだが
00636104/04/01 23:23ID:???
>>62
俺もそう思った
0064nobodyさん04/04/12 09:09ID:/q6VLnQf
age
0065nobodyさん04/04/14 20:29ID:???
char AtoH( char c ){

if( ('0' <= c) && (c <= '9') ) return c - '0';
if( ('A' <= c) && (c <= 'F') ) return c - 'A' + 10;

return 0;
}


// 特殊記号を変換する
void form::Escape( char* src )
{
if(src){
char *dst;
for(dst = src; *src; src++ ){
if( *src == '%' )
*dst++ = ( AtoH( *++src ) << 4 ) + AtoH( *++src );

else if( *src == '+' ) *dst++ = ' ';

else *dst++ = *src;
}
*dst++ = '\0';
}
}

URLエンコード文字列をデコードする関数なんですが、
これがVC2003でうまく動かないんです(VC6ではできたのに)。

原因がわかる人がいらしたら教えてください。
VC2003はほとんど初期設定です。
0066nobodyさん04/04/14 20:34ID:???
( ゚д゚)ポカーン
00676504/04/15 18:39ID:???
自力解決しますた…
お騒がせスマソ…
0068nobodyさん04/04/17 18:21ID:???
なんて過疎
0069nobodyさん04/04/21 16:53ID:???
CGI/1.2ドラフトを訳していたのですが、質問です。
http://cgi-spec.golux.com/cgi-120-00a.html

章8.2 のLocationに関する項目を読むと、絶対URIがスクリプトによって返されると、
サーバは'302 redirect' HTTP応答メッセージを発生させるだろう、とあります。

しかし、302はMoved Temporarilyで、307 がTemporary Redirectになります。
これは誤植と解してよいのでしょうか?
0070nobodyさん04/04/21 21:33ID:???
>>69
スレ違いな気もするけど…。
307コードがHTTP/1.1以降だからでは。
0071nobodyさん04/04/21 21:54ID:???
ああ、このドラフトはHTTP/1.0策定時点のままということか。
了解しました。サンクス。
http://www.itmedia.co.jp/dict/internet/www/server/03011.html

つーか、ドラフトのまんまでなぜ決定しないんでしょうかね。
0072nobodyさん04/05/01 20:42ID:???
M$が不要と言うから
0073nobodyさん04/05/02 15:38ID:???
1月1日はドラフト記念日
0074nobodyさん04/05/04 00:34ID:???
このスレを活気付かせるにはどうしたらいいものか
0075nobodyさん04/05/05 01:01ID:???
>74 が C/C++ による CGI 用のフレームワークを作成してくださるそうです。
0076nobodyさん04/05/05 03:48ID:???
aprを積極的に利用してみるスレにしたら
0077nobodyさん04/05/05 21:54ID:???
巨大なクエリ来た時にどうするのが王道でしょうか
0078nobodyさん04/05/06 02:53ID:???
無視する
0079nobodyさん04/05/06 07:13ID:???
>>61情報thx。

http://acpp.sourceforge.jp/
どうもプリプロセッサっぽい感じなんだが、こういう言語仕様に踏み込むもんより、
便利関数ライブラリの方が喜ばれると思うんだがなぁ。

とは言うものの、今困ってるのはサムネ画像生成だけなんで、他はいらんけど・・・。
0080nobodyさん04/05/06 07:24ID:???
>>77

>>78が正解でしょ。
より詳しく書くなら、まず「大量とは、どれだけなのか」を規定し、規定以上のは無視。って事で。
0081 ◆Ad8rdfdZgs 04/05/06 18:24ID:???
>>65

関係ないが
char AtoH( char c ){
if( ('0' <= c) && (c <= '9') ) return c - '0';
if( ('A' <= c) && (c <= 'F') ) return c - 'A' + 10;
return 0;
}



char AtoH( char c ){
if( ('0' <= c) && (c <= '9') ) return c - '0';
if( ('A' <= c) && (c <= 'F') ) return c - 'A' + 10;
if('a'<=c)&&(c<='f')) return c-'a'+10;
return 0;
}

EzWeb機が%ffみたいに送ってくるから、後々のためにもこの方が。

>>77
if(atoi(getenv("CONTENT_LENGTH"))>=1024000) return 0;
char *buf = new char[atoi(getenv("CONTENT_LENGTH"))+1];
//あとは好きにしる

delete [] buf;
00826504/05/06 18:38ID:???
>81
あるんだそういうの
サンクス


ちなみに
*dst++ = ( AtoH( *++src ) << 4 ) + AtoH( *++src );



*dst = AtoH(*++src) << 4;
*dst = AtoH(*++src);
dst++;

にしたらうまくいったんすよ
なんかやっぱMSだなと思た
0083 ◆Ad8rdfdZgs 04/05/06 18:59ID:???
>>82
dstの位置変わってないから
*dst = AtoH(*++src) << 4;
の意味がなくなってる気もするんだが。

*dst = AtoH(*++src) << 4;
*++dst = AtoH(*++src);
dst++;
とでもしないと、dstに下位4ビットだけを突っ込んでる気がしてならないんだが。
0084nobodyさん04/05/06 20:02ID:???
*dst += AtoH(*++src);
だた
0085 ◆Ad8rdfdZgs 04/05/06 21:54ID:mtQhCRig
>>84
あ、漏れの書いたのが間違ってた・・
こっちのほうがまずいw

納得
0086nobodyさん04/05/06 23:36ID:???
>>77
エラートラップ。

>>82
> *dst++ = ( AtoH( *++src ) << 4 ) + AtoH( *++src );
二箇所の*++srcのどちらが先に処理されるかは未定義。
0087nobodyさん04/05/07 02:51ID:???
>>65>>82

>>86も言ってるが、今はコンパイラが働き者だから、1行で済ます必要は無いと思うぜ・・・。
恥を忍んで言うが、漏れが *dst++ = ( AtoH( *++src ) << 4 ) + AtoH( *++src );  こんなの書こうとしたら、
数行になってしまう。でも間違いにくいから良いんだと思ってる。勝手に。

副作用とかいちいち憶えてらんないし・・・マクロ書く時に苦しむのもやだし。
0088nobodyさん04/05/07 09:40ID:???
>>87
いいこといった。
0089nobodyさん04/05/09 14:01ID:???
>65
>なんかやっぱMSだなと思た

自分のバグを他人のせいにするな。
00906504/05/09 16:10ID:???
ごめn
0091nobodyさん04/05/23 22:40ID:Mos9rAOM
なんだかどうも、プログラムの引数に「=」の文字を入れると動作がおかしいのです。

というのは、
たとえば Perl の CGI で
 test.cgi?a=5
とすれば、$ENV{'QUERY_STRING'} の中身は "a=5" になるのに、

C で作った CGI (printfするだけのモノ) だと
 test.cgi?a=5
としても、main(int argc,char *argv[]) の argc が 1 で引数が受け取れてないのです。
test.cgi?a5
とすれば、argc は 2 になって、argv[1] の中身が "a5" になるのですが。

そういうわけで引数に「=」を使えない理由と対処をキボン願います。
00929104/05/23 22:43ID:???
ちなみに、自宅サーバで
Apache HTTP Server 2.0.49
を使ってます。Apacheの設定に問題があるのかな…
0093nobodyさん04/05/23 22:58ID:???
釣り…か?

Perlの$ENV{QUERY_STRING}に相当するものはstdlib.getenv("QUERY_STRING")なわけだが。
0094nobodyさん04/05/23 23:31ID:???
別にC言後とは関係ないけど引数で処理したかったら

hoge.cgi?-hoge+true+-fuga+false
などとすれば

./hoge.cgi -hoge true -fuga false
こうなる

あとはgetopt(3)でも使えばオプションの処理ができるかな
まあ一般的ではないな
0095nobodyさん04/05/24 15:40ID:???
>>91
Cで作る CGI プログラムは、普通のコンソールアプリと基本的には同じだが、
main関数でもらえる「引数」と、CGI で渡される「引数」は、全くの別物だ。

main関数の「引数」は、コマンドラインで与えられるものだが、CGI の方は
サーバから環境変数を経由して与えられる。なので>>93が言ってる事を試してみそ。

>>93
釣りにしてはあまりにあまりな・・・・なので、さすがに釣りではないと思うよ。
00969104/05/24 23:40ID:???
>>93-95
なる。基本的なところを忘れてました。環境変数でしたね。
getenvでできましたです。ありがとうございました。
0097nobodyさん04/05/24 23:58ID:???
>>96
(・∀・) オメデトウ!コレカラモガンガッテイコウ!
0098nobodyさん04/05/25 09:45ID:???
POSTの場合は?
ってゆうかそのあたりも含めて楽になるperlのCGIモジュールみたいなのとかあるんでしょうか?
0099nobodyさん04/05/25 13:14ID:???
POSTはstdinから。
aprとか使えば少しは楽になるかも
http://apr.apache.org/
0100nobodyさん04/05/25 17:05ID:???
GETも POSTも、環境変数渡しという点ではほとんど同じ。POSTの方がちょっぴり手間が多いだけ。

POSTの場合は、環境変数 CONTENT_LENGTHに、POSTされた文字列長が入っているので、
そのぶんだけ stdinから読み込む。簡単に書くとこんな感じ。

int i;
char * env_p;

env_p = getenv( "CONTENT_LENGTH" );
if( NULL == env_p ) {
 /* 何もないです */
}
else {
 for( i = 0 ; i < atoi( env_p ) ; i ++ ) {
  /* ここで getchar とかする */
 }
}

こういう定型処理をラクにするライブラリとかは、いろいろ出回ってるから探すが吉。
0101nobodyさん04/05/28 21:45ID:???
自分もその辺気になりつつも資料見つけられず躊躇してたんですが
挑戦してみようと思います。

/*ただスクリプトの時にはあまり気にしなかったメモリ管理とか不安もあります。
何かしら”C/C++ゆえに気をつけるべき事”とかあるんでしょうか?*/
0102nobodyさん04/05/29 10:51ID:???
C++はあまり詳しくないが、Cについて気を付けるべき事はたくさんありすぎて、とてもここでは書ききれないがな。
漏れが言えるのはこれくらい。レベル的にバラバラの事書いててスマソ。

・取得したメモリリソースは必ず解放せよ
・変数の型には気を付けすぎるくらい気を付けよ(ロジック調べても分からんバグの原因になる)
・ポインタは理解して使え
・コンパイルするので、変数名は長くてもいい、分かりやすいものを!
・同じ理由で、コメントもしつこく書け
・同じ理由で、短く書こうとするな(バグの原因になる事がある)
・1つの関数を長くしすぎるな
・==演算子で定数と変数を比較する時は、定数を左辺に書け(間違って=にしてもすぐ分かる)
・プログラムテストは慎重に細心に、完璧を目指せ
0103nobodyさん04/05/30 01:08ID:???
C++でも入出力系はstdioのほうがやり易いと思う
小さいし
0104nobodyさん04/05/30 05:37ID:???
>>101
Cなら文字列操作とメモリ管理のライブラリをどこかから調達するか、
自作してから取り掛かった方がいいよ。
バッファオーバーフロー対策が一番面倒だから。
0105nobodyさん04/05/31 18:03ID:???
perlとかにあるsplit関数に当たるものがあると便利
0106nobodyさん04/05/31 19:24ID:???
>>102
ありがとうございます。
C/C++以外でも使えそうなTIPSが多くて参考になります。
慎重さは勿論のこと、ちょっとした工夫も大事と再認識しました。
>>104
こちらもありがとうございます。
まずはそういうライブラリを読むところから始めてみますね。
0107nobodyさん04/06/01 00:28ID:???
昔、Lispやっててperlのsplit関数自作したことあったな
0108nobodyさん04/06/06 21:23ID:NScYEbPc
jcode.plのようなものってありませんか?
0109nobodyさん04/06/06 21:48ID:???
iconv
0110nobodyさん04/06/07 01:33ID:H9Q5V/FE
C/C++/D用(ってかx86用)のアプリケーションサーバが出たら乗り換えますか?
関数、クラスの単体テストエンジンとかついたようなヤツで。
0111nobodyさん04/06/11 01:06ID:???
スタンドアローンて拡張性無いけど手軽なのよね
0112nobodyさん04/06/26 15:46ID:???
perlやphpに比べて生産性が低くて不利ですな。
mod_perlにスピードで負ける事もあるし。
mod_cobolとかあるのかしら
0113nobodyさん04/06/26 15:49ID:???
( ´_ゝ`)フーン
0114nobodyさん04/06/27 18:25ID:EhMRIfAG
すまん、CでCGI作るときに便利なライブラリとかってないかな。
探しても探してもでてこないんだが・・・
0115nobodyさん04/06/27 20:07ID:???
( ´,_ゝ`)プッ
0116nobodyさん04/06/27 20:10ID:EhMRIfAG
こんなに必死に頼んでいるのに教えてくれないなんて、
ここはひどいインターネットですね!
0117nobodyさん04/06/27 20:21ID:???
(・∀・)ニヤニヤ
0118nobodyさん04/06/27 20:25ID:???
2chだからある程度は割り切らないと
0119nobodyさん04/06/27 20:43ID:EhMRIfAG
// ここはひどい(ry のネタ知らない人がいるっぽ
探してもやっぱり見つからんです。
0120nobodyさん04/06/27 20:56ID:???
いい加減なやつしかいないスレにはいい加減に書き込めばいいんだよ
0121nobodyさん04/06/27 21:56ID:???
>>114
>探しても探してもでてこないんだが・・・

http://www.gnu.org/search/fsd-search.py?q=CGI
お好きなのをどうぞ。


0122nobodyさん04/06/28 16:49ID:Mb32PIG4
webminなんかがどう関係あるんだろうと小一時間(ry
0123nobodyさん04/06/28 18:59ID:???
フォームのデコード&検索クラスがあればあとはどうでもいいけどね
所詮ラインプログラムだし
0124nobodyさん04/06/28 19:14ID:???
>>122
gnu.orgの人に聞いてくれたまえ。
0125nobodyさん04/06/29 15:43ID:???
gnu.orgの人も大変だな
0126nobodyさん04/06/29 18:42ID:iEl5sUlF
ttp://www1.harenet.ne.jp/~a-mura/cgisoft/dakentype/dakentop.html
これに英文の問題を入れたい場合、Word.jsはどのようにいじれば?
0127大学の宿題だけど意味不明、おしえてけろ04/07/02 22:30ID:rGD5/XCW
下記のフォローチャート教えて!
2進数の乗算
シフト演算と加算と減算の繰り返しによって2進数の乗算を行う。
条件 一、乗算と被乗算は符号なしの16ビット整数
   二、乗算と被乗算以外の変数は32ビット整数
   三、シフトは論理シフト(表記方法:左シフトは<、右シフトは>)
      例、 X=X<1 Y=Y>1
参考 一、左シフト⇒nビットシフトは(2のn乗)倍になる
   二、右シフト⇒nビットシフトは{1/(2のn乗)}倍になる
一般法則  一、乗数の2の0乗ビットが1の時、被乗数をそのまま加算し、
        0の時は何もしない。
      二、乗数の2のn乗ビットが1の時、被乗数をnビット左シフト
        して加算する。0の時は何もしない。


             ( 開 始 )
                |
             X = 被乗数
             Y = 乗数
             Z = 0    ←←乗算結果
                |
0128nobodyさん04/07/02 22:40ID:???
ローカルルールくらい読んでくれな
0129大学の宿題だけど意味不明、おしえてけろ04/07/02 22:45ID:rGD5/XCW
下記のフォローチャート教えて!

図形の右90度回転
  配列H[Y:1〜7][X:1〜7]は、図のような図形要素が
  格納されてます。これを図2のように右に90度回転
  した配列要素を配列I[Y:1〜7][X:1〜7]へ作成する。

図1
     X軸
   1 2 3 4 5 6 7
  1■■■■■■■
 2 ■
y 3   ■
軸 4 ■ ■■■
  5 ■ ■
  6 ■ ■
  7■■■■■■■


図2
   x軸
 1 2 3 4 5 6 7
1■     ■
2■■■■  ■
3■     ■
4■■■■■■■
5■  ■  ■
6■  ■  ■
7■     ■
0130nobodyさん04/07/03 00:39ID:???
>>129

(Start)
 ↓
[回転処理]
 ↓
(End)
0131nobodyさん04/07/03 11:52ID:???
$gzip = '/bin/gzip/';

if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/ && $gzip ne ''){

print "Content-type: text/html;charset=Shift_JIS\n";

if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/){

print "Content-encoding: x-gzip\n\n";

}else{

print "Content-encoding: gzip\n\n";

}

open(STDOUT,"| $gzip -1 -c");

}else{

print "Content-type: text/html;charset=Shift_JIS\n\n";

}

これのC版はどうすればいいんですかね・・・?
0132nobodyさん04/07/03 11:53ID:???
( ゚д゚)ポカーン
0133nobodyさん04/07/05 15:51ID:/46odsg/
Cで画像のアップロードCGI作ってるんだけど、
データの取得の方法が分からんのよ。

if ( strcmp(method, "POST") == 0 ) {

// コンテンツ長の取得
contentLength = getenv("CONTENT_LENGTH");

// バッファサイズの判定
if( atoi(contentLength) > LINE_BUFFER ) {

// バッファサイズエラー
exit(0);
}


fgets(Data, (int)contentLength, stdin);

}
これじゃDataには入らないの?
0134nobodyさん04/07/05 16:25ID:???
% man 3 fgets
0135nobodyさん04/07/05 16:27ID:???
>>133
>これじゃDataには入らないの?

http://www2k.biglobe.ne.jp/~motoi/cdecgi02.html
参考になるかも。

アップロードの場合、
getenv("CONTENT_TYPE")がapplication/x-www-form-urlencoded
じゃなくて、multipart/form-data; boundary=----------hogehogeohogehoge
ってなってるはずだから読み込んだデータを分離する必要あるんじゃない?
0136nobodyさん04/07/05 18:14ID:/46odsg/
>multipart/form-data; boundary=----------hogehogeohogehoge
>ってなってるはずだから読み込んだデータを分離する必要あるんじゃない?

色々と試した結果、データ分離前まではできました。
分離させんの大変そうだなぁ。
0137nobodyさん04/07/05 18:16ID:???
( ゚д゚)ポカーン
0138nobodyさん04/07/05 18:49ID:???
>>137

ageてまで何が言いたいのかわからん。
いいあるなら方法教えてよ。
0139nobodyさん04/07/05 20:15ID:???
教えて君ウザイ
0140いいあるなら04/07/05 21:12ID:???
いいあるなら
014113804/07/05 21:38ID:???
>>139-140
   , -‐−-、  ヽ∧∧∧ //  |
.  /////_ハ ヽ< 釣れた!> ハ
  レ//j け ,fjlリ / ∨∨V ヽ  h. ゚l;
 ハイイト、"ヮノハ     //   |::: j  。
  /⌒ヽヾ'リ、     //     ヾ、≦ '
. {   j`ー' ハ      // ヽ∧∧∧∧∧∧∨/
  k〜'l   レヘ.   ,r'ス < 初めてなのに >
  | ヽ \ ト、 ヽ-kヾソ < 釣れちゃった!>
.  l  \ `ー‐ゝ-〈/´   / ∨∨∨∨∨∨ヽ
  l     `ー-、___ノ
  ハ   ´ ̄` 〈/‐-、
0142nobodyさん04/07/05 22:36ID:???
stdinから丸呑みしてファイルにでも保存してみろ。
■ このスレッドは過去ログ倉庫に格納されています