C/C++ CGIスレッド
■ このスレッドは過去ログ倉庫に格納されています
>>560
「これは○○県警さんでやった方法なんですが」
「では、それとはちょっと変えてください」
いや、別に変えなくても良いものは
無理して変えんでも良いがな...orz ソースを渡したくないって、飯を食うのには重要だけどな。
毎回ソース渡してたら、いつかは喰えなくなる。
mod_perlが速いってことは無いな。perl自体重いし、perlもCで書かれてるから、perlの構文解析の分遅い。
結局は、常時起動デーモンのトムキャット方式に落ち着くよね。
誰もが通る道なのかと安心した(w
同じ方法だと同じ攻撃に弱いってのはあるから多様性って重要。
古い所のシステムだと、歴史的経緯で非効率な処理を求められることはよくある。
開発費高めでも払ってくれるので好きだけど。他と同じ単価なら受けないけどな。 CからSQL鯖弄るのって、ODBCぐらいしかない?
Cには、JDBCみたいなのは無いよね? >>569
ODBCとか使わなくても、Cならネイティブドライバ使えばいいのでは…。
他のDBへの移植性を上げたいのならODBCを使うしかないかな。 CGI から,GetModuleFileName を呼び出すと、ドライブ名の前に"\\?\"という文字が付きますが、
これって、なんなのでしょうか?、教えてください。
Windows 2003 Server、 IIS、Visual Studio 6.0 です。
そのPCそのものを表す。
PCローカルURIって言うとちと違うのかな? >>572
回答どうもです
が、エクスプローラで「\\?\共有名\ファイル名」とやっても「見つかりません」となります。
(「\\コンピュータ名\共有名\ファイル名」だとOK) >>564
共有メモリ使えばいいだけ。mod_uploaderのソース嫁 何処に不満があるの?
worker MPM使って、dispatchはApacheに任せ、データはshm/mmapで共有ってのが現実的だと思うなぁ。
>これも、基本的にシングルプロセスのMPMは無いから
>全体で共有することも出来ないし、
これミスリーディングだとおもうな。データ共有するのにシングルプロセスである必要なんて全くないだけだし。 >>574,576
私もあれからいろいろ調べてみたら、
やはり共有メモリを使うって方法にたどり着いた。
ただしDBデータをキャッシュする場合、キャッシュの破棄タイミング、
新しいデータのキャッシュへの反映が難しい。
作成したページをキャッシュする場合も、やはり同じ問題が。
SQLサーバを使わない、もしくはSQLiteを使うとかすれば、
可能ではありそうだけど、それだとDBのクラスタリングが出来ないので意味がない。
PostgreSQLやMySQLのプラグインやトリガーという形で、
キャッシュ管理のプロセスに情報を伝える仕組みが要りそう。
さすがにこれだけの仕組みとなると、とても一人で作るのは無理そうだ。 えーと、あなたのところではSHMMAXが、実装メモリに対して充分な値なわけですね。
例えば、1Gのメモリを積んでいてキャッシュ用途に大部分を使いたいと考えた場合
SHMMAXが数十M程度だとおおいに不満なのですけど。
あ、/proc/sys/kernel/shmmaxで充分な大きさに変更できるならば良いですがね。
それとも、細切れにブロックを確保して頑張ってやりくりしますか。
あと、shmではなくmmapを使う場合を含めて、当然排他機構が必要となるわけですが
たかがメモリの読み書き程度で重いといわれるプロセス間のロックはたまりませんね。
もちろん、プロセス間通信と比較すればずっと軽いでしょうが
ロック期間を短く(こまめにロック/アンロック)という、一般的に推奨される手法には向きませんな。
スピンロックで足りる用途だけならともかく。 SHMMAXについてはおっしゃるとおり。
>たかがメモリの読み書き程度で重いといわれるプロセス間のロックはたまりませんね。
汎用のロックを使わなければ良いだけだと思う。
mod_uploaderがやってるように、共有メモリ領域に対してCPUのatomic命令を使うとか。
ロック期間が短い→CPUのatomic命令
ロック期間が長い→signal
で十分対処できるような。そもそもお金かけて高いサーバ使うならともかくその辺の安いPCでサービス提供するなら別にスレッド使わなくても十分なような。
複数プロセス使うのに必ずしも重い汎用のプロセス間ロックを使う必要なんてないし、なんかミスリーディングだとおもう。最初に結論ありきで論じてませんか? >>579
ほほー。
ttp://pc11.2ch.net/test/read.cgi/mysv/1173959386/397
システムコール使ってないし、こんなもんか >>578
詳しいことは理解できないけど>>578の性格が悪いことだけは分かった。
もっと普通にかけるだろうに。 2chのread.cgiとかのソース発見!
ttp://www.gedoh.org/aki/2ch/current/bbs/ >>584
それちょっと古いやつね。
前ちょこっとソース読んだ限りでは、完全に2ch用に特化してるから、
汎用性もなにもあったもんじゃないし、ソースも読みにくい。 CGIってPerlのことですよね?
Perlっていうのは言語だからC言語でCGIを作るというのは
C言語でPerl言語を作るということなんですか????? C言語で掲示板(簡単なもの)を作りたいのですが
入門書2冊読んだ程度でもできるでしょうか…?
ちなみにC言語以外の言語はやったことがなく
C言語歴も1ヶ月で大きなプログラムも作ったことがありません。 C言語で掲示板(簡単なもの)を作りたいのですが
入門書2冊読んだ程度でもできるでしょうか…?
ちなみにC言語以外の言語はやったことがなく
C言語歴も1ヶ月で大きなプログラムも作ったことがありません。 CGIを書くには少なくとも文字列を自由にあやつる必要があるけれど、
Cで文字列が自由自在になるには初心者が一ヶ月では少し足りないような。
まぁでもやって出来ないこたぁないよ。うん。
お返事ありがとうございます。
自由自在…今持ってる本で文字列関係?でわかってないのは
str全般とcalloc、malloc、reallocぐらいなんですがここら辺を覚えれば結構違ってきますかね…? とりあえずHTMLを吐くところから始めてみればいいんじゃない?
POSTとか絡んでくると色々大変だけど 私は数年のプログラム経験があったけど、
CGIに必要なライブラリを一通り作るだけで2週間かかったよ。
どこからかライブラリを拾ってこないと、全部一から作ってたら結構大変。 >>592-593
そうですか・・・とりあえずまだ力不足だしそろそろ学校
も始まってたぶん作る暇もなくなると思うので今は
とりあえずもっと勉強してから作ろうと思います。
>>594
英語多すぎてわかりませんw
でもありがとうございます。出来るだけがんばって読んでみます。
>>594
最低限のライブラリって感じだね。
自作のライブラリってどれくらい容量or行数ある?>All
私のはPHP並に機能揃えたから2.5MBぐらい。 >>596
ほとんどphpにwrapperしちゃってるから自分で書いた部分は1MBも無い >>596
馬鹿だろ。手動かすまえに頭動かさないやつは死ね。 >>597-599
手抜きするためにこれだけライブラリ揃えたんだけどね。 そういう手抜きをしたきゃ最初からphpで書いた方が早いだろうに・・・ 自分で全部好きにしたい、というのはわからんではないけど、
デカいライブラリをメンテするのはそれはそれで大変な気がする。
バージョン管理とか面倒そう。
というわけで、自前の奴はPOST/GETとエスケープくらいしかない。
あと、なんかのBSDライクな奴からパクってきた文字列処理と基本データ構造もあるが。
CでCGIってそれほど頻繁に必要になるわけじゃないんで、これで十分。
2.5MBってソースのサイズかね? それともバイナリ?
8桁のランダム文字列(特定文字A〜Fのみ)
をCGI上にて表示させる方法が知りたいのですが
@chara = ('A','B','C','D','E','F');
for($i=0; $i<8; $i++)
{
$numbera = $chara[int(rand($#chara+1))];
}
という表記を現在しています。
しかし、1文字しか表示されないのですが
8桁分ランダムに表示させるにはどのように表記したらよいでしょうか?
>>607
perlはスレ違いだが・・・まぁいいや。
$numbera =
↓
$numbera .=
>>606
> CでCGIってそれほど頻繁に必要になるわけじゃないんで、これで十分。
こっちはメインで使ってるから、メンテとかもさほど気にならない。
> 2.5MBってソースのサイズかね? それともバイナリ?
ソースのサイズ。
バイナリは150〜500KBぐらい。 コアとなるPOST,GET,HTTP Header,File uploadとかのCGI固有の入出力部分以外は
適宜外部ライブラリをリンクするのではだめなの?
PHP並の機能っていってもPHPがPHP並の機能をもっているのはPHPの中の人が
全部自分で書いたからじゃなく、たくさんの外部ライブラリとリンクしてるからなわけで。
それともフレームワーク的な機能がたくさんあるのかな?
>>611
フレームワーク的な機能が多いかな。
外部ライブラリを使いやすくするための中間層的なライブラリも多い。 ぐだぐだいってないでコード公開すればいいんじゃね? visual c++ 2005 expressで,c++でcgiプログラム作ってるんだけど、
Windows 2000のIISの環境でcgiからファイルをオープンしようとすると、オープンに失敗するんだが・・・
何でか誰かわかりますか?
Windows XPのIISの環境ではちゃんとオープンに成功します。
<環境詳細>
仮想ディレクトリ:Scripts
Inetpub/Scripts/cgi/cgi.exe (http://hostname/Scripts/cgi/cgi.exe)
Inetpub/wwwroot/form/form.htm (http://hostname/form/form.htm)
form.htmからcgi.exeにPOST。
cgi.exeは、起動されると Inetpub/Scripts/cgi/file/ フォルダにファイルを
作ろうとするんだけど、WindowsXPだとOpen成功、Windows2000だとOpen失敗。 IISのログを確認する
フォルダの書き込み権限を確認する >>621
ソース見る限りClearSilverよりシンプルだから速そうだけど、機能が全然足りない予感。
まー、本格的に使うには、ClearSilverでも機能/汎用性/拡張性が足りなさそうなんだけどさ。 で、本格的に使ってるおまいらはどうしてるの?
PHPで作っちまったほうが速いか? かなり遅レスになるけど>>578は、Lock FreeとかWait Freeなアルゴリズムについて勉強した方が良いと思った。
あと>>564も
>自前で簡単なシングルプロセス/マルチスレッドなサーバーを書いて
>apacheでは、必要な時にそのサーバーと交信するmoduleを書いて使う、
>というのが速度的にはベストだろう。
え?って感じ。センス疑う。 まぁmod_uploderのコードもどうかと思うが データの共有手段と排他手段がまったく直行関係にないかのような書き方してる時点でだめなんじゃね?初対面の人がそういうことはなしてたら俺はスキル疑うなぁ >>626
その自信からするとサイボウスラボとかmixiとかその辺のなかの人でしょうか?
>というのが速度的にはベストだろう。
こう言い切る前にはいくつかの前提が必要なはず。
もしかして自分が普段接している前提条件の下でしか考えられない人? 文系上がりのプログラマってそういうこと多い。自分が暗黙のうちに想定してる前提を忘れがち。
理系だと卒論/修論書くうちにそのへんはみっちりなおされる。 >>628
mixiはPerlじゃないっけ?
Yahooと楽天が一部をCで書いてたはず。 C++ で CGI というときに一番の難関は文字コードだと思うんだが
そういう危機感がこのスレにあまりないのは
やっぱり掲示板とかCMS級のユーザーフレンドリ階層なアプリを誰もC++らないからなのか…
JIS, SJIS, EUCJP, UTF7, UTF8, UTF16, UTF32 と改行コードまで自動判別しつつ
相互変化できるクラスを作ろうとしたら死にかけた babel使ったからそんなもんに苦労しなかったな。
他にもいろいろあるでしょ?
Gaucheのソースが文字コード判定は優秀らしい。
それでもある程度バイト数がないと難しいだろうけど。
できればcharset指定とかを認識して、判断するのが正しいけど、
Webブラウザから渡されるのはcharset指定とかが一切ないからなー。
SJISかUTF-8のどっちを渡されたかは、予め決めておくか、
Gaucheのを使って判定するしかない予感。
変換は普通にiconv使ってる。 >>637
文字コードなんて問題にしたことは無い。
何もかもUTF-8で済ますように事前にお膳立てをするから。 そういや絵文字の範囲を丸々シフトしてiconvを騙してるフィルタのコードを見たことあるな。
あれ、C+iconvじゃなくてjavaだったかな。
FileUploadのC/C++用ライブラリを探しています。
どなたかご存じないでしょうか? サーバから見て、アップロードしたいのか、ダウンロードしたいのかどっち? クライアントがアップロードしたものをサーバで受け取る際のHTTPプロトコル(RFC1867)
を解析するライブラリが欲しいです。
JavaでいうとCommons FileUploadのような ちょっとスレチっぽいが
cgiをコマンドラインから直接起動したいんだけど
POSTやGETで渡す引数を模擬するにはどうしたらいい? >>651
REQUEST_METHODとかCONTENT_TYPEとかCONTENT_LENGTHとかの
環境変数も設定する必要があるだろ。 スレ違いかもしれないのですが
成分分析のフリーCGIをどなたかご存じないですか?
expatの使いかたがわからん
サンプルソースがおいてあるサイトわかる人いる? 本家のリンク先にあるチュートリアルとソースディストリビューション中のexampleで
とりあえず使うには十分じゃない?
perlのクックブック(オライリー)を参考にした。 レンサバ使ってて、C言語可なんですけど
OSはLINUX系としか教えてくれない。
シェルは使わせてもらえない。
自前のPCでコンパイルして実行形式をUPしろ。
リンクするときにstaticにしないとダメよ。
としか情報が貰えません。
linuxの実行形式ってカーネルやディストリビューション違っても
互換あるんですかね?
それはC言語使用可能とは言わないだろう。
ともかく、作ったバイナリがサーバで動くかどうかはバイナリの形式とか、
libc他のAPI互換性があるかどうかとか、CPUのアーキテクチャとかによる。
ま、フツーに最近のi386ディストリでgccを使ってスタティックリンクな
バイナリを作ればたいがい動くんじゃないの。
>それはC言語使用可能とは言わないだろう。
ボクもそう思うんですが、C言語使用可能と宣伝してたんです。
isleというそれなりに大きいレンサバ屋です。
cpuはxeonだと自慢してたので386系なのは確実なんですが…
ちなみにこれがisleのFAQ「C言語は利用できますか」の回答です。
C言語で作成されたスクリプトのご利用も可能ですが、
telnet/sshはご利用いただけないため、iクラスタにて利用している
Linux系のOSを利用している端末にてコンパイル後に
アップロードしていただく作業が必要となります。
他の端末にてコンパイルする場合には、ライブラリを共有できないため、
static オプションつけたコンパイルを行ってください。 PerlのCGIでgccを叩いてみたらどう?
パスが通っていることと、負荷の制限が軽いことが条件だけど。
昔のXREAではそうしていた。
今からVirtual PCという手もある。 >662
telnet.cgiが使えました。
uname -a でfedora3だということもわかりました。
デバッグ用の環境をfedora3で作ります。
みなさんありがとうございました。 フレーム内の監視を行いたいのですが、これにはどういう仕掛けを作れば良いんでしょうか。
インフレームの内部を監視して、表示された中身をソースかキャプチャで保存するCGIを作りたいのです。 ■ このスレッドは過去ログ倉庫に格納されています