トップページ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/
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から丸呑みしてファイルにでも保存してみろ。
014313804/07/05 23:42ID:???
>>142
またまた釣れた。
0144nobodyさん04/07/06 08:43ID:LzoVUw8w
CでCGIは既に古典的なんだから
知らない人の手助けでもせんと
このスレの意味ないじゃん
0145nobodyさん04/07/06 09:27ID:???
% man 2 read
% man 3 fread
% man 3 fgets
0146nobodyさん04/07/06 10:28ID:???
ここは、そんな餌で俺がクマーなインターネッツですね
0147nobodyさん04/07/06 11:39ID:???
プログラム板へ書き込んだのですが放置されました。。(涙)
マルチで申し訳ないですが再度書き込まさせていただきます。

この度RedHat7.3(@)からRedHat9(A)へ移行したのですが、
@で問題なく動作していたCGIがAの環境で一部動作しなくなりました。
//環境
@RedHat7.3
gcc-2.96-113
apache-1.3.27-2
ARedHat9
gcc-3.2-2-5
httpd-2.0.40-21.9

原因を調べていくとどうも日付計算部分がエラーを起こしているようです。
一般的な日付計算ですが何が問題なのか検討もつきません。
(ググッたのですが・・わかりませんでした。。gccが原因??)
どなたか教えていただけないでしょうか?よろしくお願いいたします!!
※apache1.3.31でも同様の現象がおきました。。。
/*-----ソース一部抜粋------*/
#include <stdio.h>
#include <time.h>

struct tm*ptr;
time_t lt;
intNowYY, NowMM, NowDD;

lt = time(NULL);
ptr = localtime(&lt);
NowYY = ptr->tm_year + 1900;
NowMM =ptr->tm_mon + 1;
NowDD = ptr->tm_mday;
/*----------------------*/
0148nobodyさん04/07/06 11:42ID:???
機種依存文字使うなヴォケ
014914704/07/06 11:50ID:???
書き忘れましたが、Cで作っているプログラムです。コンパイル問題なく通ります。
apacheのエラーログを見ると”premature end of script headers”と出ているので
どうもhtmlに出力時にCGIが死んでる見たいです。
同じ現象が出ている人も多いと勝手に思ってるのですが、私だけなんでしょうか??
ググっても perlのことばかりなんで・・・・
015014704/07/06 11:53ID:???
>>148
localtime(&lt);のことですか?
&を大文字で書かないと2ちゃんに書き込むときに
">"に変換されてしまうんで・・・
0151nobodyさん04/07/06 12:03ID:???
なんだ、ネタだったのか…
釣られちゃったよ orz
0152nobodyさん04/07/06 12:07ID:NBQAU1O/
CGIの出力でSSIを使いたいのですが
使えます?使ってる人いますか?
0153nobodyさん04/07/06 12:19ID:???
(´-`).。oO(アホか・・・)
015415204/07/06 12:23ID:NBQAU1O/
>>153

なんで?なんでアホなの??
サーバーがパースしてくれないから絶対使えないの??
0155nobodyさん04/07/06 12:25ID:???
そんな餌で俺がクマー(AA略
015615204/07/06 12:27ID:NBQAU1O/
マジな質問でも釣りとかいわれるスレなんだね・・・
0157nobodyさん04/07/06 12:29ID:???
それ以前にスレ違い
015815204/07/06 12:33ID:NBQAU1O/
なんで?CのCGIでSSIを出力したいんだよ?
このスレジャン
0159nobodyさん04/07/06 12:38ID:???
こいつはCのCGIで出力するhtmlについてもここで聞くのだろうな・・・
016015204/07/06 13:20ID:NBQAU1O/
>>159

知らないんだろ?w
0161nobodyさん04/07/06 13:28ID:???
釣れますか?
016215204/07/06 13:30ID:NBQAU1O/
くだらない釣りすんなよ・・スレ汚しが・・・
0163nobodyさん04/07/06 13:31ID:???
このスレ、なんか臭いな
016415204/07/06 13:34ID:NBQAU1O/
お前が臭くしたんだよ・・・
016514704/07/06 13:41ID:???
>>151さん
ネタじゃないんですよ。。本気で悩んでます。。

>>152さん
SSIを使いたいというのはよくわからんのですが
特定のHTMLの一部分に数値等を表示させたいということでいいんですか?
0166nobodyさん04/07/06 14:01ID:???
localtime(<);
016715204/07/06 14:11ID:NBQAU1O/
>>165

<!--#include file="他のファイル.html" -->を使って他のhtml
ファイルを取り込んでブラウザーに出力できないかなって思ったんです。

SSIってhttpdがファイルをパースして結果を置き換えますよね・・・

なんで出力をパースさせればいいのかな??
CGIからの出力をパースさせるのはhttpdの設定(apacheなんでhttpd.conf)??

なんて考えてたんですけど実際はどうすればいいのかわからないので
質問してみたんです・・・・・

0168nobodyさん04/07/06 14:28ID:???
SSIの基本を理解してないならくだ質スレへどうぞ
016915204/07/06 14:35ID:NBQAU1O/
>>168

はあ?どこがわかってねえっていうんだよボケ!
つーかどこが理解してないかいえねえだろ?
トリアエズくだらねえツッコミばっか入れてるキモイてめえはこんりんざいだまってろ
アホ。
0170nobodyさん04/07/06 14:38ID:???
どうもならんな・・・
己の無知に気がついていない
017115204/07/06 14:45ID:NBQAU1O/
何もいわないで適当に批判すれば頭がよくみられるんだなこのスレでは・・・
0172nobodyさん04/07/06 14:50ID:???
もう回答は得られないのだから好きに吠えていろ池沼
0173nobodyさん04/07/06 15:00ID:???
おまいら、これでも見てモチツケ
http://www.sweetnote.com/images/5604972680f574242200eccb0dc39af4.jpg
http://www.sweetnote.com/images/549af04143a8f0a1c24a5c1826ab3234.jpg
017415204/07/06 15:03ID:NBQAU1O/
147みたいなまともな人もいるんだけど、
172みたいなどうしようもない負け犬がわんわん吠えると
とたんに堕スレになっちゃうな。
0175nobodyさん04/07/06 15:19ID:???
>>173
見れないよう
017614704/07/06 15:45ID:???
>>152
あんまりあつくなっても・・・・
SSIうんぬんではなくて
Cでパースして出力すればできるのでは?
0177黒死犬 ◆EgxBlf8nvc 04/07/06 16:45ID:???
AddType
0178fff04/07/06 16:50ID:???
>>SSI
http://httpd.apache.org/docs/misc/FAQ-F.html#ssi-part-iii
という感じで、"You can't."だと。しかし、
This is a feature The Apache Group hopes to add in the next major release after 1.3.
で、付加される機能かも知れない。知らないが。
0179nobodyさん04/07/06 16:56ID:???
>>147
とりあえずprintfとかでヘッダーを出力した後にfflushしておけばそのエラーは出ないかも。
018017904/07/06 17:08ID:???
というか、その前に落ちているのか。
おそらく問題は他にある。
0181黒死犬(魚かも) ◆EgxBlf8nvc 04/07/06 17:18ID:???
ヘッダにいらんもん出力してるって分かってんだから
プログラムが出力してる内容を見れば良いだけじゃない・・・
0182nobodyさん04/07/06 17:19ID:???
>>181
ヘッダを出力する前に落ちているだけだろ。馬鹿かお前は。
■ このスレッドは過去ログ倉庫に格納されています