C言語のCGIを語りつつ普及するスレ
■ このスレッドは過去ログ倉庫に格納されています
0001somebodyさん
03/03/23 13:20ID:???前Cでかかれた掲示板を見かけたんですけど、なんかタグ用の処理が行われていないらしくて、グロ画像やエロ画像なんて
貼りたい放題でしたよ・・。わたしなんて<xmp>タグを貼りかけましたよ・・・
それはどうでもイイとしてKENTさんのCGIみたいに高機能で手軽なCGIのC言語版みたいなのがあったらなぁなんて思ったことありませんか?
このスレではそんなCGIについて語って、CでCGIの考えを普及していきたいです。
0175nobodyさん
03/04/13 20:40ID:???普通のPerlのスクリプトは
コンパイル→中間コード→実行
という手順だけど
mod_perlだと
最初の一回だけコンパイル→中間コード→実行で
次からはコンパイルをしないで中間コード→実行
となるんで劇的に速くなる。
PHPはコンパイル→中間コード→実行なんで
多少それよりかは落ちるかも・・・
PHPAとか中間コードを残すのもあるけど
まだ出始めで微妙だね。
0176173,175
03/04/13 20:42ID:???mod_perlとかmod_phpとかと比べたらCGIとしては
多少オーバーヘッドが大きいと言いたかっただけなんだが・・・
見当違いだったらスマソ
0181nobodyさん
03/04/13 21:42ID:???0182nobodyさん
03/04/13 21:46ID:???今もされてるのだろうか
0185Perl、PHP、C、HTMLファイルにして読む
03/04/14 00:32ID:dnrQZih10186nobodyさん
03/04/14 00:49ID:???ことだぜい!
結構速いYO!
0187nobodyさん
03/04/14 02:07ID:???それは理想だが、実際に
機械語・アセンブラで本当にCGIを書く気ある?
あるわけ無いよな。
それに一番近いのが、Cで開発するって事だろう。
最初はPerlで書かれていた2ちゃんねるのCGIも、
アクセス増加でサーバ負荷が高くなり、Cで書き直されたらしいし。
0189nobodyさん
03/04/14 17:47ID:???モジュールと言わずとも、FastCGIって手もある。
http://www.fastcgi.com/
いずれにしてもモジュール組み込まなきゃならないから、
root持ってないと辛いけど。
遊びで動かしてる自宅鯖とかなら無問題。
あと、C++で楽しいライブラリ知らない?
一応cgiccてのは見付けたけど、いかにもGNUな田舎臭い
ライブラリなんだよなあ。
0190nobodyさん
03/04/14 20:28ID:???WTLとか。
0191nobodyさん
03/04/14 20:45ID:???0193nobodyさん
03/04/15 00:34ID:???C言語でCGIを書いた奴はいないようだな。
脳内プログラミング…
0194nobodyさん
03/04/15 01:48ID:CDjnnd9Zん、実際に作って自分のsiteで使ってるよ。
新たにperl覚えるのもメンドイし。
簡単なbbsとアクセスログ付きカウンタだけだけどね。
簡単なライブラリも作ったけど、
さすがに人様にお見せできるレヴェルじゃないので(w
一応Servletもつかえる環境構築しだけど
家かえってまでそんな大掛かりなコーディングしないし。。
0196fusianasan
03/04/16 19:33ID:???日本語処理が難しいね。
バイナリがどうのこうのって、なかなかうまく逝きません。
ヒントを所望したい。
0197nobodyさん
03/04/16 20:53ID:???0198nobodyさん
03/04/16 21:27ID:???0199194
03/04/17 00:45ID:???デコード自体はマルチバイト意識しなくてもいいんやん?
あ、俺が作った時はあくまで個人用途なので
ちゃんと試験したらボロボロかもしれんが(w
文字コード関係は自作せず、nkfのソースをぱくったYO!
どっかのサイトで見本があったので。
0200nobodyさん
03/04/17 05:56ID:???まともに実装されているとは限りません。
wchar_t == UCS-2でも幸せな部類です。
しかもCGIなので、どのencodingが飛んで来るかも分からない
ので、ワイド文字関係は基本的に使えません。
0201山崎渉
03/04/17 12:00ID:???0202fusianasan
03/04/17 18:05ID:???1:GET/POSTの判別をする。/2:クエリーストリングや標準出力をよむ。/3:一文字ずつ次のように処理をする。
4:%が現れたら次の文字とさらに次の文字(それぞれ順にchar型変数A/Bとする。)
5:int jp = 0x10*A + B;
6:jpをchar型配列にぶち込んでいく。string[now] = printf("%c",jp);(nowには配列の現在の番号が入る。)
ご指摘お願いします。
0203fusianasan(202
03/04/17 18:06ID:???{+は空白にする。
{%でも+でもなければそのままchar型配列にぶち込む
0204194
03/04/17 18:40ID:???基本は問題ないと思われ。。
パッと見、気になるのは手順の5。
int jp でなく char jp の方が心臓に良いと個人的に思う。
#符号の問題ね。
あとは初歩的な・・・
4の処理が誤ってないこと、
char配列操作時のポインタ操作が「多少複雑」になってると思うので
ケアレスミスが無いことを確認汁。
0205fusianasan
03/04/17 18:43ID:???大変参考になる、返答ありがとうございました。
またがんばって試行錯誤してみます。
本当に有難うございますぃた。
0206fusianasan
03/04/17 18:47ID:???A;Bの処理で
swich(A) {
case '0':
A = 0x01;
case '1':
A = 0x02;
(中略)
case 'f':
case 'F':
A = 0x0f
}
って漢字に16進にしなくてはいけませんよね?
0207fusianasan
03/04/17 18:49ID:???%のあとにつづく2文字をA,Bに代入したあとの処理を表しています。
ちょっとミスってるけど(セミコロンぬけ)
その辺は見逃してください。
ちなみにBに関しても同じ処理を行う。
0208194
03/04/17 18:49ID:???>ひらがなとかはわりとデコードできるんですけど・
デコードできる== 正しい文字で認識出来るってことだよね?
html含め処理内の文字コードの統一は出来てる??
0210nobodyさん
03/04/17 18:59ID:???0211194
03/04/17 19:00ID:???break; も抜けてるが勘弁してやろう(w
その通り、16進だよ。
ちなみに漏れは、大文字のA〜Fを返すブラウザに出会ったことがないので
こんな感じ。
#余りいい見本では無いが・・
char *str;
char w;
if( *str < 0x41){
w = *str - 0x30;
}else{
w = (*str - 0x41) + 10;
}
0212fusianasan
03/04/17 19:15ID:???すべてシフトJISで送ってくれると思ってしていません。
(そこまで考える余裕がまだないからね・・・。)
HTMLはなるべくshift-jisで出力するようにメタタグに
記している。
>>211
ほんまや。break;が抜けちょる・・・・。
0213nobodyさん
03/04/17 19:28ID:???>int toint(int c)
>{
>if (c >= '0' && c <= '9') return c-'0';
>if (c >= 'A' && c <= 'F') return c-'A'+10;
>if (c >= 'a' && c <= 'f') return c-'a'+10;
>return 0; /* other */
>}
0214nobodyさん
03/04/17 19:50ID:???#include <stdlib.h>
char *url_decode(char *str)
{
char *p1=str,*p2=str,buf[3]={0};
for(;*p2;p1++){
switch(*p2){
case '%':
strncpy(buf,p2+1,2);
*p1=(char)strtol(buf,NULL,16);
p2+=3;
break;
case '+':
*p1=' ';
break;
default:
*p1=*p2;
p2++;
}
}
*p1='\0';
return str;
}
>>202
> string[now] = printf("%c",jp);
string[now]には1か負の数(おそらく-1)しか入らないけどいいの?
0215nobodyさん
03/04/17 19:56ID:???0216bloom
03/04/17 19:56ID:ahUYqmP+0217215
03/04/17 20:02ID:???デコードに文字コードが影響するのか?
0218bloom
03/04/17 20:02ID:VKhj20RH0219fusianasan
03/04/17 22:04ID:???今日ローカル鯖じゃなくてちゃんとしたUnix鯖で試したんすよ・・・。
じゃあローカル鯖でやったときよりイイ結果がでたんすよ。
やっぱりコンパイラによってちがうんですかね?
ローカル鯖ではLSI試食版つかってたんですけどね。
Borland c++だとファイルサイズが巨大になるからあんまり
好きじゃないんだな・・・。
0220nobodyさん
03/04/17 22:29ID:???0222fusianasan
03/04/18 18:47ID:???ちゃんとデコードできるようになりますた。
わーい!わーい!
0225nobodyさん
03/04/18 21:02ID:???> 5:int jp = 0x10*A + B;
この変が阿呆らしいと言っているんだよ。strtolという関数があるだろ。
0226nobodyさん
03/04/18 21:06ID:???http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.1.6.html
0227nobodyさん
03/04/18 23:45ID:???は置いといてマジレス・・
「車輪の再発明」だの「標準関数にある」だのってよく言われるけど
効率を追求する業務じゃなきゃ別にいいんじゃん?
確かに無駄な努力かもしれんけど、
初心(初学)者はそれによって大幅に理解が深まると思うし。
その気になれば、ほとんど全部自分で作れるのが
Cの長所でもあり短所でもあると思うよ。
逆に業務なら、『低レベル』まで自分で作れると
いざというとき強かったりする。
特殊な例かもしれんけど、一部組み込み系とか
ほとんど標準関数使えない様な環境もあるし。
自分で書いてて、屁理屈に見えてきた。
逝ってきます・・・
0228nobodyさん
03/04/19 00:24ID:???strtolだと、プラス/マイナス符号を突っ込まれても大丈夫?
たとえば、'%-E' とかあった場合。
それほど大きな問題にならないとは思うけど。。
また、URLデコードの後は0x80から0xFFが含まれる場合を考えて、
char型では無くunsigned char型の方がいいと思われ。
0230228
03/04/19 00:31ID:???変な文字食わせると0が返るから。
0231229
03/04/19 00:32ID:???0232228
03/04/19 00:36ID:???変?
# お好きにどうぞ。
0235fusianasan
03/04/19 15:13ID:???0236nobodyさん
03/04/19 16:21ID:???0237nobodyさん
03/04/19 16:30ID:???0241fusianasan
03/04/19 21:18ID:???0242山崎渉
03/04/20 05:58ID:???( ^^ )< ぬるぽ(^^)
0243fusianasan
03/04/20 17:37ID:???/  ̄ ̄ー―-_
▲ ) /
/ハハハ\ |\|\|\___イ
. / \ | /\ /\lllll|
/ _ _ \ | /・\ /・\ |
. | ⊂⊃ ⊂⊃ | |  ̄/、  ̄ ̄ )
(| ∴ ∪ ∴ | |  ̄ /
\ <=> / ヽ <三> /
\____/ ヽ /
∧ /| \/
,r‐‐‐‐‐‐‐‐‐'´ `゙‐‐‐‐‐‐‐‐‐‐、r‐‐‐‐‐‐'´ `゙‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐、
| 山崎君、きみはぬるぽしか言えないのかい| そんなに卑怯者、卑怯者と |
i やっぱりきみは卑怯ものさ。 i 言わないでくれよ〜(泣 i
0245nobodyさん
03/04/23 19:47ID:jAUiG1DXWhat does it mean?
0247nobodyさん
03/04/23 21:10ID:???0248nobodyさん
03/04/26 01:53ID:???代入ひとつからしてもめんどくさくてしょうがない。
0251ふしアナ:
03/04/27 21:06ID:Cn2+e3lFこれってなんて読む?
(漏れの場合)
char ちゃー
argv あーぐぶい
printf ぷりんとふ
sprintf すぷりんとふ
hex へっくす
int いんと
getenv げっといーえぬぶい
void ぼいど
buffer ばっはー/ぶっふぁー
malloc まろっく
とりあえず今日はこのへんで・・・・
0254ふしアナ:
03/05/03 23:37ID:4lYMudidあるとおもいますけど、それぞれの美点と欠点をあげてくれませんか?
0256nobodyさん
03/05/03 23:39ID:???0257FENT
03/05/06 00:10ID:mpO79UQ6UNCGIをWINDOWSで実行モジュール".exe"にコンパイルしたことある人
コンパイル方法おしえて。
英語のDocを読むとターボCがなんちゃらでわからん。
できれば、VC++とかでコンパイルしたいのねー。
0258FENT
03/05/06 00:14ID:mpO79UQ6WINDOWSで動かす場合だけど。
拡張子".cpp"で作成すればWINAPIをガシガシつかったCGIが出来るよ。
0259nobodyさん
03/05/06 00:21ID:???0260nobodyさん
03/05/06 00:47ID:???0261FENT
03/05/06 01:04ID:mpO79UQ6UNCGIに変わるもので、おすすめのものしっているかた
いらしたら教えてください。
0262動画直リン
03/05/06 01:10ID:qyy2Fj990263nobodyさん
03/05/06 01:18ID:???char *Decode(char *str)
{
unsigned char *p, *bstr;
if(*str == '\0') return str;
bstr = (unsigned char*)str;
for(p=bstr; *bstr!='\0'; bstr++) {
if(*bstr=='+') {
*p=' ';
p++;
}
else if(*bstr=='%') {
*p = (hex2dec(*(bstr+1)) * 16)+(hex2dec(*(bstr+2)));
p++;
bstr+=2;
}
else {
*p = *bstr;
p++;
}
}
*p='\0';
return str;
}
何年か前に作ったデコード関数。
マクロの括弧が無駄に多い気が・・・
0264263
03/05/06 01:20ID:???0265nobodyさん
03/05/06 01:29ID:???0266_
03/05/06 01:35ID:???http://www.japan.pinkserver.com/kensuke/hankaku/hankaku07.html
http://japan.pinkserver.com/kensuke/zenkaku/index.html
http://www.japan.pinkserver.com/kensuke/hankaku/hankaku08.html
http://japan.pinkserver.com/kensuke/hankaku/hankaku10.html
http://www.japan.pinkserver.com/kensuke/hankaku/hankaku07.html
http://japan.pinkserver.com/kensuke/hankaku/hankaku03.html
http://www.japan.pinkserver.com/kensuke/hankaku/hankaku05.html
http://japan.pinkserver.com/kensuke/hankaku/hankaku01.html
http://www.japan.pinkserver.com/kensuke/hankaku/hankaku06.html
http://japan.pinkserver.com/kensuke/hankaku/hankaku04.html
http://www.japan.pinkserver.com/kensuke/hankaku/hankaku09.html
0267261
03/05/06 02:05ID:mpO79UQ6返信ありがとうございます。すみませんでした。
う〜ん
ヘキサのデコードというか、UNCGIを使いたかったのは、
HTTPのリクエストから切分けてデコードした後に、
環境変数にセットしている、仕組みをそのまま使いたいなーって思って
たんですよ。
UNCGIの処理の流れ的には
・環境変数取得
・切離し後デコード
・それぞれ別の環境変数にセット
・URLの引数(ttp://***/uncgi/aaa.exe)のプログラム(aaa.exe)を起動
・起動されたプログラムは、環境変数よりPOST及びGETの
パラメータを取得
こんな感じだとおもうんですよ。作ればいいんですけど・・・
ただ、コンパイルできたらいいなーと思いまして。
VC++だと、何ヶ所かコンパイルにひっかかってしまうので
私のめんどくさがりやから・・・質問してしまいました。
0268261
03/05/06 02:08ID:mpO79UQ6ただ・・この仕組みをつくるとしたら疑問があるんです。
HTTPのリクエストで起動されたCGIによってセットされる環境変数は、
ブラウザごとに別々の扱い(DOSプロンプトのように)になるのでしょうか?
同時にアクセスがあった場合、同一名称の環境変数は、それぞれブラウザ
ごとに違う値を保持するのかな???
0269nobodyさん
03/05/06 03:04ID:CpGJxcjL結局cgiccに移行したよ。cgiccおすすめ。
0270bloom
03/05/06 03:10ID:qyy2Fj990271_
03/05/06 03:25ID:???http://www.japan.pinkserver.com/kaorin/moe/jaz04.html
http://japan.pinkserver.com/kaorin/mona/index.html
http://www.japan.pinkserver.com/kaorin/moe/jaz05.html
http://japan.pinkserver.com/kaorin/moe/jaz08.html
http://www.japan.pinkserver.com/kaorin/moe/jaz09.html
http://japan.pinkserver.com/kaorin/moe/jaz02.html
http://www.japan.pinkserver.com/kaorin/moe/jaz06.html
http://japan.pinkserver.com/kaorin/moe/jaz01.html
http://www.japan.pinkserver.com/kaorin/moe/jaz10.html
http://japan.pinkserver.com/kaorin/moe/jaz07.html
http://www.japan.pinkserver.com/kaorin/moe/jaz03.html
0272_
03/05/06 04:07ID:???http://www.japan.pinkserver.com/kaorin/moe/jaz03.html
http://japan.pinkserver.com/kaorin/mona/index.html
http://www.japan.pinkserver.com/kaorin/moe/jaz02.html
http://japan.pinkserver.com/kaorin/moe/jaz08.html
http://www.japan.pinkserver.com/kaorin/moe/jaz09.html
http://japan.pinkserver.com/kaorin/moe/jaz05.html
http://www.japan.pinkserver.com/kaorin/moe/jaz06.html
http://japan.pinkserver.com/kaorin/moe/jaz01.html
http://www.japan.pinkserver.com/kaorin/moe/jaz10.html
http://japan.pinkserver.com/kaorin/moe/jaz07.html
http://www.japan.pinkserver.com/kaorin/moe/jaz04.html
0274nobodyさん
03/05/07 00:56ID:ZdGvFTnv↑朝早くから
誰 オ マ イ
■ このスレッドは過去ログ倉庫に格納されています