トップページ⇒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/
05735712007/07/28(土) 08:51:56ID:QYOm8nEM
>>572
回答どうもです

が、エクスプローラで「\\?\共有名\ファイル名」とやっても「見つかりません」となります。
(「\\コンピュータ名\共有名\ファイル名」だとOK)
0574nobodyさん2007/07/31(火) 00:21:17ID:???
>>564
共有メモリ使えばいいだけ。mod_uploaderのソース嫁
0575nobodyさん2007/07/31(火) 01:21:12ID:???
キャッシュに共有メモリって・・・
別にいいけど
0576nobodyさん2007/07/31(火) 01:39:34ID:???
何処に不満があるの?
worker MPM使って、dispatchはApacheに任せ、データはshm/mmapで共有ってのが現実的だと思うなぁ。

>これも、基本的にシングルプロセスのMPMは無いから
>全体で共有することも出来ないし、
これミスリーディングだとおもうな。データ共有するのにシングルプロセスである必要なんて全くないだけだし。
05775632007/07/31(火) 03:20:02ID:???
>>574,576
私もあれからいろいろ調べてみたら、
やはり共有メモリを使うって方法にたどり着いた。

ただしDBデータをキャッシュする場合、キャッシュの破棄タイミング、
新しいデータのキャッシュへの反映が難しい。
作成したページをキャッシュする場合も、やはり同じ問題が。

SQLサーバを使わない、もしくはSQLiteを使うとかすれば、
可能ではありそうだけど、それだとDBのクラスタリングが出来ないので意味がない。

PostgreSQLやMySQLのプラグインやトリガーという形で、
キャッシュ管理のプロセスに情報を伝える仕組みが要りそう。

さすがにこれだけの仕組みとなると、とても一人で作るのは無理そうだ。
0578nobodyさん2007/07/31(火) 03:22:01ID:???
えーと、あなたのところではSHMMAXが、実装メモリに対して充分な値なわけですね。

例えば、1Gのメモリを積んでいてキャッシュ用途に大部分を使いたいと考えた場合
SHMMAXが数十M程度だとおおいに不満なのですけど。
あ、/proc/sys/kernel/shmmaxで充分な大きさに変更できるならば良いですがね。
それとも、細切れにブロックを確保して頑張ってやりくりしますか。

あと、shmではなくmmapを使う場合を含めて、当然排他機構が必要となるわけですが
たかがメモリの読み書き程度で重いといわれるプロセス間のロックはたまりませんね。
もちろん、プロセス間通信と比較すればずっと軽いでしょうが
ロック期間を短く(こまめにロック/アンロック)という、一般的に推奨される手法には向きませんな。
スピンロックで足りる用途だけならともかく。
0579nobodyさん2007/07/31(火) 08:34:44ID:???
SHMMAXについてはおっしゃるとおり。

>たかがメモリの読み書き程度で重いといわれるプロセス間のロックはたまりませんね。
汎用のロックを使わなければ良いだけだと思う。
mod_uploaderがやってるように、共有メモリ領域に対してCPUのatomic命令を使うとか。

ロック期間が短い→CPUのatomic命令
ロック期間が長い→signal

で十分対処できるような。そもそもお金かけて高いサーバ使うならともかくその辺の安いPCでサービス提供するなら別にスレッド使わなくても十分なような。


複数プロセス使うのに必ずしも重い汎用のプロセス間ロックを使う必要なんてないし、なんかミスリーディングだとおもう。最初に結論ありきで論じてませんか?
0580nobodyさん2007/07/31(火) 09:43:21ID:???
>>579
ほほー。

ttp://pc11.2ch.net/test/read.cgi/mysv/1173959386/397
システムコール使ってないし、こんなもんか
0581nobodyさん2007/08/03(金) 23:31:03ID:LuhsKnBr
>>578
詳しいことは理解できないけど>>578の性格が悪いことだけは分かった。
もっと普通にかけるだろうに。
0582nobodyさん2007/08/05(日) 18:32:24ID:???
>>578
おまえの頭がかたいことは良くわかった
0583nobodyさん2007/08/09(木) 02:14:08ID:???
>>578のような人間とは仕事したく無いなぁ
0584nobodyさん2007/08/11(土) 00:09:14ID:???
2chのread.cgiとかのソース発見!
ttp://www.gedoh.org/aki/2ch/current/bbs/
0585nobodyさん2007/08/11(土) 10:14:45ID:???
>>584
それちょっと古いやつね。
前ちょこっとソース読んだ限りでは、完全に2ch用に特化してるから、
汎用性もなにもあったもんじゃないし、ソースも読みにくい。
0586nobodyさん2007/08/19(日) 21:44:36ID:???
CGIってPerlのことですよね?
Perlっていうのは言語だからC言語でCGIを作るというのは
C言語でPerl言語を作るということなんですか?????
0587nobodyさん2007/08/19(日) 23:42:55ID:???
ぐぐれ
0588nobodyさん2007/09/06(木) 17:50:36ID:VY4R4z3/
C言語で掲示板(簡単なもの)を作りたいのですが
入門書2冊読んだ程度でもできるでしょうか…?
ちなみにC言語以外の言語はやったことがなく
C言語歴も1ヶ月で大きなプログラムも作ったことがありません。
0589nobodyさん2007/09/06(木) 17:51:48ID:VY4R4z3/
C言語で掲示板(簡単なもの)を作りたいのですが
入門書2冊読んだ程度でもできるでしょうか…?
ちなみにC言語以外の言語はやったことがなく
C言語歴も1ヶ月で大きなプログラムも作ったことがありません。
0590nobodyさん2007/09/06(木) 18:18:03ID:???
CGIを書くには少なくとも文字列を自由にあやつる必要があるけれど、
Cで文字列が自由自在になるには初心者が一ヶ月では少し足りないような。

まぁでもやって出来ないこたぁないよ。うん。
0591nobodyさん2007/09/06(木) 19:22:43ID:VY4R4z3/
お返事ありがとうございます。
自由自在…今持ってる本で文字列関係?でわかってないのは
str全般とcalloc、malloc、reallocぐらいなんですがここら辺を覚えれば結構違ってきますかね…?
0592nobodyさん2007/09/06(木) 20:57:42ID:???
とりあえずHTMLを吐くところから始めてみればいいんじゃない?
POSTとか絡んでくると色々大変だけど
0593nobodyさん2007/09/07(金) 03:00:06ID:???
私は数年のプログラム経験があったけど、
CGIに必要なライブラリを一通り作るだけで2週間かかったよ。
どこからかライブラリを拾ってこないと、全部一から作ってたら結構大変。
0594nobodyさん2007/09/07(金) 06:49:22ID:NiQeHZNB
>>591
ここ見て頑張れ
http://www.boutell.com/cgic/
0595nobodyさん2007/09/08(土) 17:40:25ID:vnaZ3dnt
>>592-593
そうですか・・・とりあえずまだ力不足だしそろそろ学校
も始まってたぶん作る暇もなくなると思うので今は
とりあえずもっと勉強してから作ろうと思います。
>>594
英語多すぎてわかりませんw
でもありがとうございます。出来るだけがんばって読んでみます。
0596nobodyさん2007/09/09(日) 04:36:43ID:???
>>594
最低限のライブラリって感じだね。

自作のライブラリってどれくらい容量or行数ある?>All
私のはPHP並に機能揃えたから2.5MBぐらい。
0597nobodyさん2007/09/09(日) 10:12:18ID:???
人生はどう手抜きで最大限の成果を得るかだろう
0598nobodyさん2007/09/09(日) 12:29:09ID:???
>>596
ほとんどphpにwrapperしちゃってるから自分で書いた部分は1MBも無い
0599nobodyさん2007/09/09(日) 12:50:20ID:2vrQ8w/W
>>596
馬鹿だろ。手動かすまえに頭動かさないやつは死ね。
0600nobodyさん2007/09/09(日) 16:00:59ID:???
STLとBoost使えばなんとかなるんかねー
0601nobodyさん2007/09/09(日) 18:28:43ID:???
>>597-599
手抜きするためにこれだけライブラリ揃えたんだけどね。
0602nobodyさん2007/09/09(日) 23:55:25ID:???
そう、よかったねw
0603nobodyさん2007/09/10(月) 01:02:01ID:???
そういう手抜きをしたきゃ最初からphpで書いた方が早いだろうに・・・
0604nobodyさん2007/09/10(月) 04:09:10ID:???
>>603
自分でライブラリ書けば、自由が効く。
0605nobodyさん2007/09/10(月) 21:42:08ID:???
そもそも何に不自由してるのサ
0606nobodyさん2007/09/11(火) 12:54:32ID:???
自分で全部好きにしたい、というのはわからんではないけど、
デカいライブラリをメンテするのはそれはそれで大変な気がする。
バージョン管理とか面倒そう。

というわけで、自前の奴はPOST/GETとエスケープくらいしかない。
あと、なんかのBSDライクな奴からパクってきた文字列処理と基本データ構造もあるが。
CでCGIってそれほど頻繁に必要になるわけじゃないんで、これで十分。

2.5MBってソースのサイズかね? それともバイナリ?
0607nobodyさん2007/09/12(水) 14:06:22ID:aBsU5Vcp
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桁分ランダムに表示させるにはどのように表記したらよいでしょうか?

0608nobodyさん2007/09/12(水) 18:07:22ID:???
>>607
perlはスレ違いだが・・・まぁいいや。

$numbera =
 ↓
$numbera .=
0609nobodyさん2007/09/13(木) 09:49:44ID:???
>>608
やさしいねw
0610nobodyさん2007/09/14(金) 08:33:15ID:???
>>606
> CでCGIってそれほど頻繁に必要になるわけじゃないんで、これで十分。

こっちはメインで使ってるから、メンテとかもさほど気にならない。

> 2.5MBってソースのサイズかね? それともバイナリ?

ソースのサイズ。
バイナリは150〜500KBぐらい。
0611nobodyさん2007/09/14(金) 11:17:14ID:???
コアとなるPOST,GET,HTTP Header,File uploadとかのCGI固有の入出力部分以外は
適宜外部ライブラリをリンクするのではだめなの?

PHP並の機能っていってもPHPがPHP並の機能をもっているのはPHPの中の人が
全部自分で書いたからじゃなく、たくさんの外部ライブラリとリンクしてるからなわけで。
それともフレームワーク的な機能がたくさんあるのかな?
0612nobodyさん2007/09/14(金) 11:25:57ID:???
もう放っといてやれ
0613nobodyさん2007/09/14(金) 12:14:06ID:???
>>611
フレームワーク的な機能が多いかな。
外部ライブラリを使いやすくするための中間層的なライブラリも多い。
0614nobodyさん2007/09/15(土) 00:28:34ID:???
ぐだぐだいってないでコード公開すればいいんじゃね?
0615nobodyさん2007/09/18(火) 17:36:28ID:???
>>571-572
http://msdn2.microsoft.com/en-us/library/aa365247.aspx
今更だけど、\\?\はパスの長さの制限をおよそ32000文字に拡張する接頭辞。
06165712007/10/06(土) 16:16:07ID:???
>>615
おー、ありがとう
0617nobodyさん2007/11/14(水) 02:10:36ID:???
dat落ち防止
0618nobodyさん2007/11/16(金) 00:44:52ID:vk2sEYR2
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失敗。
0619nobodyさん2007/11/16(金) 12:49:38ID:???
IISのログを確認する
フォルダの書き込み権限を確認する
0620nobodyさん2007/11/16(金) 13:18:09ID:???
google-ctemplate - Google Code
http://code.google.com/p/google-ctemplate/
0621nobodyさん2007/11/18(日) 05:15:45ID:???
>>620
ClearSilverより速いのか?
0622nobodyさん2007/11/18(日) 23:17:33ID:???
>>621
ソース見る限りClearSilverよりシンプルだから速そうだけど、機能が全然足りない予感。
まー、本格的に使うには、ClearSilverでも機能/汎用性/拡張性が足りなさそうなんだけどさ。
0623nobodyさん2007/11/23(金) 16:15:53ID:???
で、本格的に使ってるおまいらはどうしてるの?
PHPで作っちまったほうが速いか?
0624nobodyさん2007/11/25(日) 09:05:24ID:???
かなり遅レスになるけど>>578は、Lock FreeとかWait Freeなアルゴリズムについて勉強した方が良いと思った。


あと>>564も
>自前で簡単なシングルプロセス/マルチスレッドなサーバーを書いて
>apacheでは、必要な時にそのサーバーと交信するmoduleを書いて使う、
>というのが速度的にはベストだろう。

え?って感じ。センス疑う。
0625nobodyさん2007/11/25(日) 09:12:48ID:???
まぁmod_uploderのコードもどうかと思うが
0626nobodyさん2007/11/25(日) 12:59:10ID:???
その程度のこと、知らないとでも思っているのかね
0627nobodyさん2007/11/25(日) 19:54:34ID:???
データの共有手段と排他手段がまったく直行関係にないかのような書き方してる時点でだめなんじゃね?初対面の人がそういうことはなしてたら俺はスキル疑うなぁ
0628nobodyさん2007/12/11(火) 21:11:10ID:???
>>626
その自信からするとサイボウスラボとかmixiとかその辺のなかの人でしょうか?

>というのが速度的にはベストだろう。
こう言い切る前にはいくつかの前提が必要なはず。
もしかして自分が普段接している前提条件の下でしか考えられない人?
0629nobodyさん2007/12/11(火) 21:18:21ID:???
文系上がりのプログラマってそういうこと多い。自分が暗黙のうちに想定してる前提を忘れがち。
理系だと卒論/修論書くうちにそのへんはみっちりなおされる。
0630nobodyさん2007/12/12(水) 08:36:13ID:4x7KYrD1
age
0631nobodyさん2007/12/12(水) 08:46:46ID:???
>>628
mixiはPerlじゃないっけ?
Yahooと楽天が一部をCで書いてたはず。
0632迷う2007/12/15(土) 08:28:11ID:???
LibCGI
http://libcgi.sourceforge.net/

CGI++
http://www.webthing.com/cgiplusplus/

GNU Cgicc
http://www.gnu.org/software/cgicc/

cgic
http://www.boutell.com/cgic/
0633迷う2007/12/16(日) 17:33:32ID:???
GNU cgicc がよさそう.
0634nobodyさん2007/12/18(火) 18:44:19ID:vyPDChvS
test
0635nobodyさん2007/12/18(火) 18:52:24ID:???
GPLはうんこ
0636nobodyさん2007/12/19(水) 23:58:08ID:???
cgiccはLGPLだが
0637nobodyさん2007/12/20(木) 18:02:10ID:yjctAQBa
C++ で CGI というときに一番の難関は文字コードだと思うんだが
そういう危機感がこのスレにあまりないのは
やっぱり掲示板とかCMS級のユーザーフレンドリ階層なアプリを誰もC++らないからなのか…

JIS, SJIS, EUCJP, UTF7, UTF8, UTF16, UTF32 と改行コードまで自動判別しつつ
相互変化できるクラスを作ろうとしたら死にかけた
0638nobodyさん2007/12/20(木) 18:58:34ID:???
babel使ったからそんなもんに苦労しなかったな。
他にもいろいろあるでしょ?
0639nobodyさん2007/12/20(木) 19:10:00ID:???
Gaucheのソースが文字コード判定は優秀らしい。
それでもある程度バイト数がないと難しいだろうけど。

できればcharset指定とかを認識して、判断するのが正しいけど、
Webブラウザから渡されるのはcharset指定とかが一切ないからなー。
SJISかUTF-8のどっちを渡されたかは、予め決めておくか、
Gaucheのを使って判定するしかない予感。

変換は普通にiconv使ってる。
0640nobodyさん2007/12/20(木) 19:20:22ID:???
判別用文字を仕込んどくんじゃないの?
0641nobodyさん2007/12/23(日) 12:00:21ID:???
>>637
文字コードなんて問題にしたことは無い。
何もかもUTF-8で済ますように事前にお膳立てをするから。
0642nobodyさん2007/12/23(日) 20:42:35ID:???
携帯の絵文字で困ったことになる
0643nobodyさん2007/12/25(火) 14:44:19ID:???
そういや絵文字の範囲を丸々シフトしてiconvを騙してるフィルタのコードを見たことあるな。
あれ、C+iconvじゃなくてjavaだったかな。
0644nobodyさん2007/12/25(火) 17:02:56ID:???
sendmailer は UTF-7 必須
0645nobodyさん2008/01/22(火) 12:04:42ID:???
FileUploadのC/C++用ライブラリを探しています。
どなたかご存じないでしょうか?
0646nobodyさん2008/01/22(火) 13:08:58ID:???
サーバから見て、アップロードしたいのか、ダウンロードしたいのかどっち?
0647nobodyさん2008/01/22(火) 19:09:37ID:???
クライアントがアップロードしたものをサーバで受け取る際のHTTPプロトコル(RFC1867)
を解析するライブラリが欲しいです。
JavaでいうとCommons FileUploadのような
06486452008/01/22(火) 19:19:44ID:???
>>647 = >>645 です。_(__)_
0649nobodyさん2008/01/23(水) 13:31:01ID:???
>>632の中から好きなの選べ
0650nobodyさん2008/01/28(月) 13:56:18ID:???
ちょっとスレチっぽいが
cgiをコマンドラインから直接起動したいんだけど
POSTやGETで渡す引数を模擬するにはどうしたらいい?
0651nobodyさん2008/01/28(月) 14:39:15ID:???
POSTなら標準入力にぶち込むだけでいい
0652nobodyさん2008/01/28(月) 14:57:11ID:???
>>651
REQUEST_METHODとかCONTENT_TYPEとかCONTENT_LENGTHとかの
環境変数も設定する必要があるだろ。
0653nobodyさん2008/01/28(月) 15:25:48ID:???
>>650
つ RFC3875
0654nobodyさん2008/01/31(木) 15:15:22ID:4cRt7TvD
スレ違いかもしれないのですが
成分分析のフリーCGIをどなたかご存じないですか?

0655nobodyさん2008/02/03(日) 05:14:18ID:???
expatの使いかたがわからん
サンプルソースがおいてあるサイトわかる人いる?
0656nobodyさん2008/02/04(月) 10:06:40ID:???
本家のリンク先にあるチュートリアルとソースディストリビューション中のexampleで
とりあえず使うには十分じゃない?
0657nobodyさん2008/02/05(火) 13:31:05ID:???
perlのクックブック(オライリー)を参考にした。
0658nobodyさん2008/02/12(火) 10:17:26ID:4A4yMdyj
レンサバ使ってて、C言語可なんですけど

OSはLINUX系としか教えてくれない。
シェルは使わせてもらえない。
自前のPCでコンパイルして実行形式をUPしろ。
リンクするときにstaticにしないとダメよ。

としか情報が貰えません。
linuxの実行形式ってカーネルやディストリビューション違っても
互換あるんですかね?
0659nobodyさん2008/02/12(火) 11:20:20ID:???
それはC言語使用可能とは言わないだろう。


ともかく、作ったバイナリがサーバで動くかどうかはバイナリの形式とか、
libc他のAPI互換性があるかどうかとか、CPUのアーキテクチャとかによる。

ま、フツーに最近のi386ディストリでgccを使ってスタティックリンクな
バイナリを作ればたいがい動くんじゃないの。
06606582008/02/12(火) 12:14:03ID:???
>それはC言語使用可能とは言わないだろう。

ボクもそう思うんですが、C言語使用可能と宣伝してたんです。
isleというそれなりに大きいレンサバ屋です。

cpuはxeonだと自慢してたので386系なのは確実なんですが…
06616582008/02/12(火) 12:17:32ID:???
ちなみにこれがisleのFAQ「C言語は利用できますか」の回答です。

C言語で作成されたスクリプトのご利用も可能ですが、
telnet/sshはご利用いただけないため、iクラスタにて利用している
Linux系のOSを利用している端末にてコンパイル後に
アップロードしていただく作業が必要となります。
他の端末にてコンパイルする場合には、ライブラリを共有できないため、
static オプションつけたコンパイルを行ってください。
0662nobodyさん2008/02/12(火) 16:51:07ID:???
PerlのCGIでgccを叩いてみたらどう?
パスが通っていることと、負荷の制限が軽いことが条件だけど。
昔のXREAではそうしていた。
今からVirtual PCという手もある。
06636582008/02/12(火) 21:59:48ID:???
>662
telnet.cgiが使えました。

uname -a でfedora3だということもわかりました。
デバッグ用の環境をfedora3で作ります。

みなさんありがとうございました。
0664nobodyさん2008/02/23(土) 09:06:34ID:???
フレーム内の監視を行いたいのですが、これにはどういう仕掛けを作れば良いんでしょうか。
インフレームの内部を監視して、表示された中身をソースかキャプチャで保存するCGIを作りたいのです。
0665nobodyさん2008/02/29(金) 11:28:26ID:???
>>664
無理ぽ。
0666nobodyさん2008/04/19(土) 14:56:01ID:TKfwdaTT
C++でClearSilver使おうと思ったんですが、素でC++用のAPIが入ってないのでClearSilver++?を使おうと思ったら
http://biology.nmsu.edu/software/clearsilver++/
調べる限りここらしいんですが、繋がりません。
ミラーとか無いんですかね?
0667nobodyさん2008/04/20(日) 15:29:47ID:???
もう復旧した様子
0668のし図2008/04/23(水) 18:51:13ID:9jK7Jl1u
スクリプトの事で質問があります。
http://mk-board.net/index.cgi

このスクリプトを抜いて自慢している人がいて、ソースを晒していた人がいるのですが
 どうやってこの
http://mk-board.net/index.cgi
のスクリプトを抜いているかが気になります。
どうやるのですか?
教えて下さい
0669nobodyさん2008/04/24(木) 09:33:08ID:???
ハッカーの仕業!?
0670nobodyさん2008/04/27(日) 17:14:11ID:xxSAA3Zr
最近はやりのIISの問題を突いてるんじゃないの。
0671nobodyさん2008/05/01(木) 04:51:52ID:???
不正アクセス禁止法
0672nobodyさん2008/05/21(水) 02:58:51ID:H73mNdaA
不正アクセス禁止法
■ このスレッドは過去ログ倉庫に格納されています