• ベストアンサー

質問趣旨を変更して

先ほどはご回答ありがとうございました さっきは質問の仕方が悪かったので質問の内容を少し変えてみました えっと、ブラウザで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

  • C/C++の初歩的な質問です

    こんばんわ!普段はperlやPHPをいじってる者です。 C/C++に興味があるので教えていただきたいのですが、 数週間前にBCCをダウンロードし、3+5の結果を表示するプログラムをtest.cというファイルに保存し、コンパイルすると、objなどのあまり見ない拡張子のファイルが出来ました。 そのなかの、exeファイルをアップロードして、アクセスしたのですが、一瞬チラッとDOSプロンプトが見えて消えました 自分はてっきり3+5の計算結果の8が表示されるもの (perlで書くとprint"8\n";) だと思ってアクセスしたのですが、これは何を意味するんですか? それとGoogleやYahoo!って確かC/C++で構成されてますよね? さっきの一瞬DOSプロンプトが表示されることを考えるとなんてGoogleやYahoo!はブラウザで文字を表示できるのかなぁと思いました。 かなり間違ったことを言ってると思いますが 何卒よろしくお願いします

  • フォルダへのアクセス権の設定方法を教えてください

    Webサーバ上のプログラムからファイルサーバへアクセスしてフォルダの作成やファイル保存をしたいのですが、フォルダへのアクセス権がないためにエラーになります。 フォルダへのアクセス権の設定方法を教えてください。 ■環境等の詳細 ■Webサーバ OS:Windows Server 2016   WORKGROUP WEB:InternetInfomationServer 10 (IIS 10) PHP:7.2.1 このサーバのPHPプログラム内からファイルサーバにある共有フォルダへアクセスして、フォルダの作成やファイルの保存を行いたい。 ■ファイルサーバ OS:Windows Server 2016   WORKGROUP このサーバ上に共有フォルダを作成している。(\\fileserver\work) Webサーバ上のIISのアプリケーションプールは 名前       :"abcdefg"(DefaultAppPoolから変更してある) .Net CLRバージョン:v4.0 マネージパイプラインモード :統合 ID        :ApplicationPoolIdentity Webサーバのタスクマネージャでw3wp.exeのユーザ名を見ると"abcdefg"になっている。 WebサーバOSにログインしてからファイルサーバ上の共有フォルダへアクセスすると問題なく閲覧・フォルダの作成・ファイルの作成ができます。 PHPのログに書かれるエラーメッセージ mkdir(): Permission denied {"userId":6,"exception":"[object] (ErrorException(code: 0): mkdir(): Permission denied at C:\\-(PHPファイルのパス)-XXXXXXX.php:60) C:\\-(PHPファイルのパス)-XXXXXXX.php(60): mkdir('\\\\\\\\fileserver\\\\work...', 511) エラーになった箇所のPHPのソースコードはmkdir("\\fileserver\work\123",0777)としてあります。 ちなみに、Webサーバ上に作成した共有フォルダには問題なくアクセスできて閲覧・フォルダの作成・ファイルの作成はできます。 (PHPプログラムのバグではないと思っています。) ネットでいくつか調べてやってみたのですが、うまくいきません。 https://technet.microsoft.com/ja-jp/library/ee886292.aspx 共有フォルダに対してIISユーザ(abcdefg)の権限が付与されていないのでは?と思い、"IIS AppPool\abcdefg"を設定したのですが、設定後に確認すると追加設定した箇所が"不明なアカウント(s-1-5-82-...)"となってしまいます。

  • コンパイルされたCGI(C言語)を別サーバで動かす

    C言語にて簡単なCGIを作成しました。 gcc -o xxx.cgi xxx.c コンパイルをするとそのサーバでは問題なく動きます。 コンパイルしたCGIファイルを同じ環境の別サーバに 持っていくとInternalServerErrorとなり実行できません。 パーミッションもディレクトリ構造もApacheの設定も サーバ名、IPアドレスを除いて同じ設定です。 これは動作させるサーバ毎にコンパイルする必要が あるものなのでしょうか?もしサーバ毎にコンパイルする 必要があるのであればそれはどうしてなのでしょうか? もしくはなにか間違っているのでしょうか? お手数ですが、お分かりになる方、お教えください。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • Webページの変更をブラウザに即時反映させる方法

    教えてください。 社内WAN上にあるWebサーバーにてホームページを公開し社員はブラウザにて全員アクセスすることが可能となっております。このホームページは定期的に更新するのですが、更新はサーバー側にてホームページのhtmlファイルをソース表示してブラウザ表示文字の追加や削除を行っております。この事を踏まえまして、 a)htmlファイルにブラウザ表示文字を追加した場合  b)htmlファイルからブラウザ表示文字を削除した場合 を行った場合にa)の作業だとユーザーのブラウザにて即座に反映されるのですが、b)の作業だとインターネット一時ファイル削除を行うまで反映されません(画面更新しても不変)。なお、ユーザーブラウザではインターネットのプロパティー¥全般タブ¥インターネット一時ファイルの設定にて「ページを表示するごとに確認する」の設定をしております。b)の作業を行ったときでもユーザーブラウザに即時反映させるにはどうしたらよいでしょうか。設定等ございましたら教えて下さい。OSはWin2000、IEのバージョンは6.02です。

  • 自作プログラムがトロイの木馬として隔離された

    fortranで大学の課題をやろうと作ったプログラムをコマンドプロンプトから実行すると 「アクセスが拒否されました」 と表示されトロイの木馬として隔離されてしましました。 その時に自動でプログラムが削除されてましたがバックアップが残っていたので復元しましたがアクセスが拒否され,一度削除してソースファイルをコンパイルしなおそうとすると 「Id: cannot open output file a.exe: Permission denied」 となり、それ以降昔作った他のソースファイルのコンパイルも出来なくなってしまいました。 使っているコンパイラ:: MinGW 使っているセキュリティソフト::ウイルスセキュリティzero 実行ファイルの名前(a.exeです)がまずいのかもしれませんが、今まで大丈夫だったのに急に使えなくなる理由もよく分かりません;; もうcで書き直すしかないのでしょうか? せめて昔書いたプログラムをコンパイル出来るようにはしたいのですが… プログラムは字数の関係で書いていません。 プログラムの書き方は知ってても基本的に素人でPCに関する知識に乏しいので、分かりやすく教えていただけるとありがたいです。 よろしくお願いします!!

  • パーミッションの設定

    質問1: 通常、フォルダ、HTMLファイル又はPHPファイルをサーバへFTPでアップロードする時は、パーミッションの設定をどのようにすればよいのでしょうか?現時点の構成では、フォルダのパーミッションが765で、全てのファイルのパーミッションが664でもサイト自体は動作はしますが、これでセキュリティ上問題ないですか? 特に「オーナー」と「グループ」のパーミッションというものが何なのだか良く理解できていません。サーバは、レンタルサーバを使用しています。「オーナー」がサーバを借りている自分ということは検討がつくのですが(オーナー=サーバを借りている人ですよね??)、いくら自分がオーナーでも自分が通常のブラウザーから自分のサイトにアクセスした場合、それが一般の人なのかそれともオーナーなのかなんて私のサイトに分かるはずもないと思います。 それでは、オーナーのパーミッションとはどのような時のために設定するのでしょうか?また、グループってだれのことですか? 質問2: ベーシック認証をかけたフォルダー内のパーミッションの設定に関する質問です。 通常、.htpasswd、.htpasswd及びベーシック認証がかかっているフォルダ内のパーミッションは765に設定して、そのフォルダ内のの全てのファイル(.htpasswd及び.htpasswdも含めて)の属性(アクセス権)は604に設定するのですよね? それとも、.htpasswd及び.htpasswdのファイルの属性を604に設定すれば、ベーシック認証がかかっているフォルダ内の他のファイルの属性は604にする必要はないのでしたっけ(664などでも良いのでしたっけ?)? よろしくお願いします。

  • 自宅サーバでCGIが動作しない

    自宅サーバでCGIを作り動かそうとしているのですが、 「webサイトによってこのページの表示を拒否されました」と出て、CGIが開きません。 いろいろ調べてみて、パーミッションの設定とかが1番それっぽい原因かなとは思ったのですが、 あれってFTPで変更するものですよね? アップロードする気がなくて、これからも自宅サーバで使用したい場合でも、 パーミッションの設定は必要なのでしょうか。その場合、どうやれば設定変更できるのでしょうか? あれってアップロードしたファイルを設定変更するものですよね・・・(私は普段FFFTPを使用しています) アップロードしてないファイルはどうすればいいのでしょうか・・・。 それともこれ以外に原因がありそうでしたらぜひ教えて頂きたいです>< よろしくお願いします!

    • ベストアンサー
    • CGI
  • c言語について、質問します。

    c言語について、質問します。 環境設定を行いましたが、 コンパイルが何度、やってもできません。 c:?source>gcc -o sample sample.c と入力すると、 gcc:installation problem, cannot exec cc1':No such file or directory とでます。 成功したら、このような文字はでないとかいてあるのですが、どうすればよろしいですか?

  • 先月始めたばかりなのですが・・・

    こんばんわ 先月C言語を始めたのですが C言語のプログラムをウェブ上で 動かすにはどうすればいいのでしょうか? フリーのコンパイラ(ボーランド社のもの) をダウンロードして、【テスト】という文字を表示させるプログラムをtest.cというファイル名で保存して コンパイルしました するとtest.objとtest.exeとtest.tdsというファイルが作成されました 次にtest.exeのファイル名をtest.cgiにしてアクセスしてみたのですが エラーになってしまいました 今まではperlやphpをやっていたので拡張子を変えるだけで動くのかと思ってたのですが 動きませんでした どうすればtest.cgiにアクセスしたときに ブラウザ上で【テスト】と表示出来るのでしょうか? 以前ここでお世話になり、参考に色々試してみたのですが 理解できませんでした よろしくお願いします

  • webページでソースだけが表示されてしまう

    HPのサーバー移行を行いまして、 「元のサーバーにあったものを全てダウンロード」→「新しいサーバーに全てアップロード」としたのですが、アクセスするとソースの中身だけが表示されてしまいます。 ブラウザがhtmlとして認識していないのかな、と思ったのですが、どうしても直せません… もともと普通に表示されていたものをアップロードしただけなので、どういう部分を見ればいいのか、見当もつきません。 どなたか、ご教示ください。

専門家に質問してみよう