- 締切済み
実行?
おせわになってます あの #include<stdio.h> int main( void ) { printf("%d" , 1 + 2); return 0; } というプログラムをつくり、 コンパイルし、EXEファイルを作って、 以前質問させて頂いたときに教えてもらった サイトを見たのですが良くわかりませんでした そのご、自分で調べてみたのですが そこでさらに混乱してしまいました このプログラムはwindowsとかunixとかその他のOSでも 動くのでしょうか? そしてブラウザ上でこのプログラムの結果の 3を出力するにはどうすればいいのでしょうか? この段階で行き住まっていて 何も進まない状況です どうか教えてください サーバのOSはlinuxでパソコンのOSはwindows xpです
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- rentahero
- ベストアンサー率53% (182/342)
C言語でCGIスクリプトを作成しようというのは、telnetやsshでログインできないとやりにくいですが、以下のようにやればなんとかできなくもないです。 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.と表示されたらコンパイルできてます。 でも、ファイルパーミッションのコントロールが面倒なのであまりお勧めしませんし、このままでは、あまりよいことにはならないです。 もし6でサーバーエラーが出るようなら、シェルの実行が許可されていないと思われます。その場合はperlで同様のスクリプトを用意するか、素直にperlでcgiを作りましょう。 また、汎用のコンパイルスクリプトは絶対に作ってはいけません。そんなことをするとセキュリティホールが出来てしまいます。 実際に運用するときには、データファイルのパーミッションにも注意しないといけないし、勉強することはたくさんありますが、まあやってみてください。
- angband
- ベストアンサー率51% (86/168)
>その後実行ファイルの拡張子を.cgiに >変更するということですよね? > そうですね。Linuxの場合は拡張子は意味がありませんが、WEBサーバである apacheはCGIプログラムの認識を拡張子で行っています。なのでCGIとして 実行したいファイルだけ、.cgiを付けます。 >今まではレンタルサーバだったので・・・ >でもレンタルサーバの場合はどうなるのでしょうか? > 普通はレンタルサーバでは、ログインしてコンパイルすることができないので、 C言語のCGIは敷居が高く、人気がありません。不便です。 ログインできるなら、ソースをアップロードしてコンパイルします。 それをCGI実行可能なWEB領域に配置すればOKです。 ログインできないならば、別のLinuxで実行ファイルを作ってからアップロード しないといけません。 一番簡単なのは、PerlやPHP、Pythonなどのスクリプト言語でCGIプログラムを 作ることかと思いますけど・・ 自宅サーバなんですか?
- angband
- ベストアンサー率51% (86/168)
>サーバでコンパイルとは >自宅サーバを立てて、サーバ用のパソコンで >コンパイルする必要があるということでしょうか? > 開発環境はWindowsXPで、WEBサーバがLinuxなんですよね? そのWEBサーバ(CGIプログラムを実行するサーバ)上でコンパイルしてください。 WindowsXPでコンパイルして、Linuxにコピーしても動きません。 >それと拡張子をcgiにするのは.exeを.cgiにすればいいのでしょうか? >exeのほかにtdsとobjという拡張子のファイルがあるのですが・・・ > Linux上でコンパイルすると、名前を指定しなければ a.out という実行ファイルが できているはずです。これを hoge.cgi のように拡張子.cgiにします。 これはWEBサーバの設定によりますが、大抵 .cgi という拡張子がないと CGIプログラムとして実行できません。 objやtdsは中間ファイルだと思いますが・・・
補足
解りました! つまりOSがリナックスのサーバでプログラムを コンパイルする その後実行ファイルの拡張子を.cgiに 変更するということですよね? 今まではレンタルサーバだったので・・・ でもレンタルサーバの場合はどうなるのでしょうか? windows xpでコンパイルしてサーバにアップロードする以外 方法が思いつかないのですが・・・
- angband
- ベストアンサー率51% (86/168)
C言語は移植性に乏しい言語ですが、stdioのような標準的なライブラリだけで プログラムすれば、別のOSでも動くと思います。 #include <windows.h> のようにWindowsのライブラリを使うと、当然Linuxでは動きません。 ブラウザに出力するCGIプログラムを作りたいならばC言語はあまり適切では ないと思います。 どうしてもC言語でCGIプログラムを作りたいのであれば、サーバ上で開発できる 環境でないとつらいと思います。 プログラムの最初にContent-typeヘッダを出力するようにして、 サーバ上でコンパイルします。 おそらく実行ファイルは.cgiという名前を付ける必要があるでしょう。
補足
サーバでコンパイルとは 自宅サーバを立てて、サーバ用のパソコンで コンパイルする必要があるということでしょうか? それと拡張子をcgiにするのは.exeを.cgiにすればいいのでしょうか? exeのほかにtdsとobjという拡張子のファイルがあるのですが・・・
補足
ありがとうございます 解りました! サーバはレンタルサーバです