C/C++ CGIスレッド
■ このスレッドは過去ログ倉庫に格納されています
自分もその辺気になりつつも資料見つけられず躊躇してたんですが
挑戦してみようと思います。
/*ただスクリプトの時にはあまり気にしなかったメモリ管理とか不安もあります。
何かしら”C/C++ゆえに気をつけるべき事”とかあるんでしょうか?*/ C++はあまり詳しくないが、Cについて気を付けるべき事はたくさんありすぎて、とてもここでは書ききれないがな。
漏れが言えるのはこれくらい。レベル的にバラバラの事書いててスマソ。
・取得したメモリリソースは必ず解放せよ
・変数の型には気を付けすぎるくらい気を付けよ(ロジック調べても分からんバグの原因になる)
・ポインタは理解して使え
・コンパイルするので、変数名は長くてもいい、分かりやすいものを!
・同じ理由で、コメントもしつこく書け
・同じ理由で、短く書こうとするな(バグの原因になる事がある)
・1つの関数を長くしすぎるな
・==演算子で定数と変数を比較する時は、定数を左辺に書け(間違って=にしてもすぐ分かる)
・プログラムテストは慎重に細心に、完璧を目指せ
C++でも入出力系はstdioのほうがやり易いと思う
小さいし >>101
Cなら文字列操作とメモリ管理のライブラリをどこかから調達するか、
自作してから取り掛かった方がいいよ。
バッファオーバーフロー対策が一番面倒だから。 perlとかにあるsplit関数に当たるものがあると便利 >>102
ありがとうございます。
C/C++以外でも使えそうなTIPSが多くて参考になります。
慎重さは勿論のこと、ちょっとした工夫も大事と再認識しました。
>>104
こちらもありがとうございます。
まずはそういうライブラリを読むところから始めてみますね。 昔、Lispやっててperlのsplit関数自作したことあったな C/C++/D用(ってかx86用)のアプリケーションサーバが出たら乗り換えますか?
関数、クラスの単体テストエンジンとかついたようなヤツで。 perlやphpに比べて生産性が低くて不利ですな。
mod_perlにスピードで負ける事もあるし。
mod_cobolとかあるのかしら すまん、CでCGI作るときに便利なライブラリとかってないかな。
探しても探してもでてこないんだが・・・ こんなに必死に頼んでいるのに教えてくれないなんて、
ここはひどいインターネットですね! // ここはひどい(ry のネタ知らない人がいるっぽ
探してもやっぱり見つからんです。
いい加減なやつしかいないスレにはいい加減に書き込めばいいんだよ webminなんかがどう関係あるんだろうと小一時間(ry フォームのデコード&検索クラスがあればあとはどうでもいいけどね
所詮ラインプログラムだし >>122
gnu.orgの人に聞いてくれたまえ。
ttp://www1.harenet.ne.jp/~a-mura/cgisoft/dakentype/dakentop.html
これに英文の問題を入れたい場合、Word.jsはどのようにいじれば? 下記のフォローチャート教えて!
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 ←←乗算結果
| 下記のフォローチャート教えて!
図形の右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■ ■ >>129
(Start)
↓
[回転処理]
↓
(End)
$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版はどうすればいいんですかね・・・? Cで画像のアップロードCGI作ってるんだけど、
データの取得の方法が分からんのよ。
if ( strcmp(method, "POST") == 0 ) {
// コンテンツ長の取得
contentLength = getenv("CONTENT_LENGTH");
// バッファサイズの判定
if( atoi(contentLength) > LINE_BUFFER ) {
// バッファサイズエラー
exit(0);
}
fgets(Data, (int)contentLength, stdin);
}
これじゃDataには入らないの? >>133
>これじゃDataには入らないの?
http://www2k.biglobe.ne.jp/~motoi/cdecgi02.html
参考になるかも。
アップロードの場合、
getenv("CONTENT_TYPE")がapplication/x-www-form-urlencoded
じゃなくて、multipart/form-data; boundary=----------hogehogeohogehoge
ってなってるはずだから読み込んだデータを分離する必要あるんじゃない? >multipart/form-data; boundary=----------hogehogeohogehoge
>ってなってるはずだから読み込んだデータを分離する必要あるんじゃない?
色々と試した結果、データ分離前まではできました。
分離させんの大変そうだなぁ。 >>137
ageてまで何が言いたいのかわからん。
いいあるなら方法教えてよ。 >>139-140
, -‐−-、 ヽ∧∧∧ // |
. /////_ハ ヽ< 釣れた!> ハ
レ//j け ,fjlリ / ∨∨V ヽ h. ゚l;
ハイイト、"ヮノハ // |::: j 。
/⌒ヽヾ'リ、 // ヾ、≦ '
. { j`ー' ハ // ヽ∧∧∧∧∧∧∨/
k〜'l レヘ. ,r'ス < 初めてなのに >
| ヽ \ ト、 ヽ-kヾソ < 釣れちゃった!>
. l \ `ー‐ゝ-〈/´ / ∨∨∨∨∨∨ヽ
l `ー-、___ノ
ハ ´ ̄` 〈/‐-、 stdinから丸呑みしてファイルにでも保存してみろ。 CでCGIは既に古典的なんだから
知らない人の手助けでもせんと
このスレの意味ないじゃん % man 2 read
% man 3 fread
% man 3 fgets ここは、そんな餌で俺がクマーなインターネッツですね プログラム板へ書き込んだのですが放置されました。。(涙)
マルチで申し訳ないですが再度書き込まさせていただきます。
この度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;
/*----------------------*/ 書き忘れましたが、Cで作っているプログラムです。コンパイル問題なく通ります。
apacheのエラーログを見ると”premature end of script headers”と出ているので
どうもhtmlに出力時にCGIが死んでる見たいです。
同じ現象が出ている人も多いと勝手に思ってるのですが、私だけなんでしょうか??
ググっても perlのことばかりなんで・・・・ >>148
localtime(&lt);のことですか?
&を大文字で書かないと2ちゃんに書き込むときに
">"に変換されてしまうんで・・・
なんだ、ネタだったのか…
釣られちゃったよ orz CGIの出力でSSIを使いたいのですが
使えます?使ってる人いますか?
>>153
なんで?なんでアホなの??
サーバーがパースしてくれないから絶対使えないの?? なんで?CのCGIでSSIを出力したいんだよ?
このスレジャン こいつはCのCGIで出力するhtmlについてもここで聞くのだろうな・・・ >>151さん
ネタじゃないんですよ。。本気で悩んでます。。
>>152さん
SSIを使いたいというのはよくわからんのですが
特定のHTMLの一部分に数値等を表示させたいということでいいんですか? >>165
<!--#include file="他のファイル.html" -->を使って他のhtml
ファイルを取り込んでブラウザーに出力できないかなって思ったんです。
SSIってhttpdがファイルをパースして結果を置き換えますよね・・・
なんで出力をパースさせればいいのかな??
CGIからの出力をパースさせるのはhttpdの設定(apacheなんでhttpd.conf)??
なんて考えてたんですけど実際はどうすればいいのかわからないので
質問してみたんです・・・・・
>>168
はあ?どこがわかってねえっていうんだよボケ!
つーかどこが理解してないかいえねえだろ?
トリアエズくだらねえツッコミばっか入れてるキモイてめえはこんりんざいだまってろ
アホ。 何もいわないで適当に批判すれば頭がよくみられるんだなこのスレでは・・・ 147みたいなまともな人もいるんだけど、
172みたいなどうしようもない負け犬がわんわん吠えると
とたんに堕スレになっちゃうな。
>>152
あんまりあつくなっても・・・・
SSIうんぬんではなくて
Cでパースして出力すればできるのでは? >>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.
で、付加される機能かも知れない。知らないが。 >>147
とりあえずprintfとかでヘッダーを出力した後にfflushしておけばそのエラーは出ないかも。 というか、その前に落ちているのか。
おそらく問題は他にある。 ヘッダにいらんもん出力してるって分かってんだから
プログラムが出力してる内容を見れば良いだけじゃない・・・ >>181
ヘッダを出力する前に落ちているだけだろ。馬鹿かお前は。 いやいや、違いますよ
>>149
を読んでください 落ちてヘッダを出力していないから「premature end of script headers」になるんだよ。
CGIが出力するhtmlにSSIを書いても動きません。
はい終了。
方法はあるけど152みたいなやつには教えん。 少なくともapache 2.0.50で動くことは今確認できた
でも完全にスレ違いの話題だな
>>152はこんなところで煽ってる暇があったら自分で調べろよヴォケ 179さん、黒死犬(魚かも)さん、187さん
アドバイスありがとうございます。
プログラムの内容は、
@入力フォームのhtmlの数値を取り込み計算
A計算結果画面のhtmlに計算結果数値を埋め込んでいく
という一般的なものなんです。
Time関数を使用している箇所を除くと表示できるのですが。。
187さんの言うとおりapacheの問題かもしれませんね。2.0.50で試してみます。
スレ違いで申し訳ありませんでした。 >>188
シェル上で擬似的なパラメータを渡してテストとかしないの?
>Time関数を使用している箇所を除くと表示できるのですが。。
そこまでわかっているのなら簡単なサンプルでデバッガのお世話
になるとか? >>189
うっ・・おっしゃるとおりです。。
問題の部分のみで再度チェックいたします。 >>188
>>187はSSIのことね
CGIが出力したSSIが動くということ
>>147は>>189タンの書いた通り
まずコマンドラインから実行できるかどうかチェックすべき
あとは、ヘッダを出力する前に落ちているのであれば
原始的な方法だけど、ヘッダを出力する場所を変えてみるとか
最初にヘッダを出力した場合動くかどうか >>188
機種依存文字を使うなと前にも言われただろ >>169
こんな暴言吐く人に回答する義理も無いわけで。
漏れはスルーしてたけど、ここの住民さんは意外と優しいのだな・・・。 >>176
そうですよね・・・SSIにこだわる理由はないですね・・・
冷静に考えたらオーバーヘットもあるしSSIを出力する意味ないですよね。
素直にCでパースします。ありがとうございました。
>>俺様に暴言を吐いた有象無象ども
おめえら使えねえんだよ、アホ。
たいした知識でもねえのに出し惜しみするチンカスは一生すっこんでろボケ。 なんだ、結局SSIで動かすことができなかったんだな(プ 【厨房のための煽り煽られ講座】
言い返せないけど負けは認めたくない
→ ( ´,_ゝ`)プッ
→ 無知白痴は黙ってろ
→ 知能障害をおこす
→ 出来たけどお前には教えない(プ ←>>152 そもそも今時CでCGIというのが不自然なんだから
変なのが湧いてくるのは仕方がない。
Cの入門者用に掲示板程度のサンプルを提供するのは意味があるかもしれんが
それ以上の高機能なものは大人しくperlかPHPで作ればいいんです。
CでCGIを開発出来ても誰も誉めてくれないし一銭にもならないのではないか?
,.. -―-- |
,.' ´ ``´  ̄ ``. .|
,. '´ , 、 .|
/ , l i ヽ \ .|
/ ./ /,' !ヽ ヽ ヽ. ヽ.|
/ / ./ l _⊥ヽ‐ヽ、'T''| |って書き込んだらC信者が何人か釣れるのカナ?
{{ | | レ'! ヽ\_\,,-,‐-.|
l l l | | |/Tハ |::f;;}||
!ヽN |、 | !` l:リ} ‐'‐'.|
`!ヽN ヽ" `ー .|
| | | `i - ..,.. '´''.|
! ! l,-┴/ハ |
ヽ N,. '´,.=El=、、/| ■ このスレッドは過去ログ倉庫に格納されています