• ベストアンサー

質問趣旨を変更して

先ほどはご回答ありがとうございました さっきは質問の仕方が悪かったので質問の内容を少し変えてみました えっと、ブラウザでABCDEFGという文字を表示させるにはどんなソースを書けばいいでしょうか? それとC/C++のプログラムというのはサーバと同じ環境下でコンパイルして、できたexeファイルをアップロードすればそのファイルにアクセスら動くのでしょうか? 例を挙げますと ABCDEFGという文字をブラウザで表示するソースをabcdefg.cというファイルで保存する→サーバと同じ環境下でコンパイル→出来たabcdefg.exeをアップロード→パーミッションの設定→http://~~~/abcdefg.exeにアクセスする の順番に作業をすればブラウザ上でABCDEFGと表示されますか? PERLはソースを書いて拡張子を.cgiにしてパーミッションを設定するだけで動きますがC/C++については無知なのでよろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.2

率直に回答。 ----ここから #include <stdio.h> int main() { printf("Content-Type: text/plain\r\n"); printf("\r\n"); printf("ABCDEFG"); return 0; } ----ここまで 上記のソースをtest.cとしてサーバにアップロードします。 シェル上で cc -o test.cgi test.c としてコンパイルします。 test.cgiという実行形式のファイルができます。 このバイナリファイルをCGIが実行できるディレクトリにコピーします。 シェルが使えない場合はあきらめるか、それなりに努力する必要があります。 ちなみに、上記のプログラムをperlで書くと ----ここから #!/usr/bin/perl print "Content-Type: text/html\r\n"; print "\r\n"; print "ABCDEFG"; ----ここまで となります。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1498663
smalldeveloper
質問者

お礼

1.compile.cgiというファイル名で以下の内容のスクリプトを用意する。 ------------------ここから #!/bin/sh echo "Content-Type: text/plain" echo echo "compiling..." gcc -o test.cgi test.c 2>&1 ------------------ここまで 2.test.cというファイル名で以下の内容のソースファイルを用意する。 ------------------ここから #include <stdio.h> int main() { printf("Content-Type: text/html\r\n\r\n"); printf("<html><body>\nHello, CGI World.\n</body></html>"); return 0; } ------------------ここまで 3.test.cgiというファイル名で改行が1個だけ入ったファイルを用意する。 4.3つのファイルをASCIIでアップロードする。 5.compile.cgiのパーミッションを755に変える。 6.test.cgiのパーミッションを777に変える。 7.ブラウザでcompile.cgiを表示してみる。 →compiling...と1行表示されるなら大丈夫。ソースに間違いがあるならここで表示されるはずです。 8.test.cgiのサイズが変わっていることを確認する。 9.ブラウザでtest.cgiを表示してみる。 →ブラウザにHello, CGI World.と表示されたらコンパイルできてます。 の方法で出来ました この処理は何をやっているのでしょうか? 現在自分のマシンにgccは入っていないのですが またこの処理は効率が悪いんですか? その他のデメリットなどがありましたら一緒にお願いします

その他の回答 (5)

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.6

> 実際にC/C++を始める際はローカルでコンパイルし、 > 実行ファイルをアップロードすることになると思います 残念ながら、多分それでは動作しないでしょう。 C言語でコンパイルした実行可能ファイルというのは、OS(たとえばWindows 95以降、とか RedHat 9とか FreeBSD 4とか…などなど)によってそれぞれ違います。 ローカルで普通の手順でコンパイルした実行可能ファイルは同じOS上でしか動作しません。 したがって、あなたがご利用のレンタルサーバと同じOSを用意するか、サーバ上でコンパイルしなければなりません。 ゲームやツールなどでWindows用、として配布されているものはWindows上で作成したものです。 > それとC/C++で構成されている有名なプログラムは > どんなものがありますか? > Blogのツールや、サーチエンジン、ウェブクローラーなどが > C/C++で書かれていると聞いたことがあるのですが、 > そのほかにご存知でしたら教えてください 有名なプログラム、ですか。WindowsやUNIX等のOSがCやC++で作成されています。そのほか一般的なアプリケーションは半分以上CまたはC++で書かれています。 ほかに有名なものとしては、WebサーバであるapacheもCで書かれています。 perlもphpも、実行環境のほうはCで書かれていますね。FirefoxをはじめとするMozilla系のブラウザも間違いなくCです。InternetExplorerもソースが公開されていませんから断言はできませんが、たぶんCです(もしかしたらC++かもしれません)。

smalldeveloper
質問者

お礼

つまり契約しているサーバがWindowsなら現在の環境でコンパイルしても問題ないということですよね? 現在契約しているサーバはVine Linuxのようなので、 少し前に購入したマシンのOSを変えてそのマシンでコンパイルし、アップロードするつもりです Fire FoxなどのブラウザもCで書かれているんですね 初めて聞きました C/C++って何でも作れちゃうんですね~ ありがとうございました

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.5

#2です。 > この処理は何をやっているのでしょうか? > 現在自分のマシンにgccは入っていないのですが > またこの処理は効率が悪いんですか? > その他のデメリットなどがありましたら一緒にお願いします まず、 この処理について。 #4氏が回答されているとおりです。 たとえばWindowsのコマンドプロンプトでBorland C Comapilerを使ってコンパイルするのと同じように、GNU C Compilerを使ってコンパイルしています。 コンパイルしたファイルがどのユーザの権限で作成されるかわからないため、簡単のため、あらかじめtest.cgiを用意する方法を提示したものです。 次に、 PCにgccが入っていないということについて ご自身のPCにgccが入っていないかどうかは関係ありません。perlやphpのスクリプトもperlやphpがインストールされていない環境でもブラウザとインターネット接続さえあれば、スクリプトはサーバ上で実行されますね。 つぎに 効率が悪いかどうかどうか、およびその他のデメリットなどについて もちろんのことですが、通常はCコンパイラはシェル上で実行するものですから、その分の手間がかかるのは仕方ないことです。 このレベルの状態から実用に供する状態まで開発を進めるためには、前準備として以下のような手順を踏む必要があります。 1.他ユーザやシステムには通常のperlのCGI以上の迷惑をかけることの無いよう努力するという前提のもとで、システム付随のCコンパイラを用いてコンパイルしてもよいかということをサーバ管理者(通常はレンタルサーバを提供するプロバイダの管理者)に確認する 2.ユーザ権限でCGIを実行するようにしたいのだがそのような設定を用いてもよいか、もしくはsuexec等の手段でそのような設定になっていないかをサーバ管理者に確認する 3.(libcは使えるとして)libc以外で使ってもよいライブラリは何か、また足りない際にユーザー権限でインストールしてもよいライブラリは何か、もしくはインストールしてはいけないライブラリが無いかどうかをサーバ管理者に確認する(これは標準Cライブラリ(libc)を用いて開発が完了する場合は必要ない) 4.無意味なサーバーへの負荷を避けるため、Cygwin+gcc+apacheという組み合わせでWindows上でGNU Cを用いたcgiの作成に習熟し、できれば最初の動作確認までwindows上で行う さらに、先の「どのユーザの権限で作成される(CGIが実行される)かわからない」問題などのOS環境・webサーバ環境についても確認する必要があります。 通常シェルを開放しているレンタルサーバに於いては、上記1~3は規約に明示してあることが多く、明示されていない場合でも、通常利用するライブラリはすでにインストールされていることがほとんどです。

smalldeveloper
質問者

お礼

ありがとうございます 実際にC/C++を始める際はローカルでコンパイルし、 実行ファイルをアップロードすることになると思います それとC/C++で構成されている有名なプログラムはどんなものがありますか? Blogのツールや、サーチエンジン、ウェブクローラーなどがC/C++で書かれていると聞いたことがあるのですが、そのほかにご存知でしたら教えてください

  • bacet14
  • ベストアンサー率50% (7/14)
回答No.4

「#2さんの回答へのお礼」に対して、簡単ですが答えます。 まず、この動作は全てサーバ上で行われます。7.のcompile.cgiの実行によりtest.cgi(実行プログラム)が作成され、9.でそれを実行しています。 これ以上の詳細は2つのファイルに書かれている事を理解できれば大丈夫でしょうから省略させて頂きます。 効率については、まずサーバと同じ環境を得るのが簡単です。サーバ上でコンパイルしてますから。ただプログラム自体が長ければデバグに手間取るかも知れません。 ある程度の実行まで手元のマシンで行い、それからそのような方法でコンパイルされるのが良いと思います。 デメリットとしてはサーバ側がshell実行をどこまで許しているか(プログラムとしてではなく契約として)によって、あまり乱用すると打ち切られる事も考えられます。念のため確認をとってはいかがでしょうか。

smalldeveloper
質問者

お礼

shell実行をどこまで許しているか現在契約している サーバには記載されていなかったのでよくわかりませんでした とりあえずローカルでコンパイルした後にアップロードして、拡張子を変更する方法をとろうと思います ありがとうございました

  • qwertyf
  • ベストアンサー率51% (14/27)
回答No.3

まずサーバがネイティブコード(=スクリプト等ではなく、実行するバイナリそのもの)のcgiの実行に対応している必要があります。 自宅サーバー等なら設定次第で可能ですが、一般的なプロバイダのサービスではできないと思います。 >えっと、ブラウザでABCDEFGという文字を表示させるにはどんなソースを書けばいいでしょうか? 標準出力に 'Content-type: text/html\n\n<html><body>ABCDEFG</body></html>' とでも出力すればOKです。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

とりあえず、下記参考URLでも見てください。

参考URL:
http://www2k.biglobe.ne.jp/~motoi/cdecgi.html

関連するQ&A