• 締切済み

実行?

おせわになってます あの #include<stdio.h> int main( void ) { printf("%d" , 1 + 2); return 0; } というプログラムをつくり、 コンパイルし、EXEファイルを作って、 以前質問させて頂いたときに教えてもらった サイトを見たのですが良くわかりませんでした そのご、自分で調べてみたのですが そこでさらに混乱してしまいました このプログラムはwindowsとかunixとかその他のOSでも 動くのでしょうか? そしてブラウザ上でこのプログラムの結果の 3を出力するにはどうすればいいのでしょうか? この段階で行き住まっていて 何も進まない状況です どうか教えてください サーバのOSはlinuxでパソコンのOSはwindows xpです

みんなの回答

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

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)
回答No.3

>その後実行ファイルの拡張子を.cgiに >変更するということですよね? > そうですね。Linuxの場合は拡張子は意味がありませんが、WEBサーバである apacheはCGIプログラムの認識を拡張子で行っています。なのでCGIとして 実行したいファイルだけ、.cgiを付けます。 >今まではレンタルサーバだったので・・・ >でもレンタルサーバの場合はどうなるのでしょうか? > 普通はレンタルサーバでは、ログインしてコンパイルすることができないので、 C言語のCGIは敷居が高く、人気がありません。不便です。 ログインできるなら、ソースをアップロードしてコンパイルします。 それをCGI実行可能なWEB領域に配置すればOKです。 ログインできないならば、別のLinuxで実行ファイルを作ってからアップロード しないといけません。 一番簡単なのは、PerlやPHP、Pythonなどのスクリプト言語でCGIプログラムを 作ることかと思いますけど・・ 自宅サーバなんですか?

gonntetu
質問者

補足

ありがとうございます 解りました! サーバはレンタルサーバです

  • angband
  • ベストアンサー率51% (86/168)
回答No.2

>サーバでコンパイルとは >自宅サーバを立てて、サーバ用のパソコンで >コンパイルする必要があるということでしょうか? > 開発環境はWindowsXPで、WEBサーバがLinuxなんですよね? そのWEBサーバ(CGIプログラムを実行するサーバ)上でコンパイルしてください。 WindowsXPでコンパイルして、Linuxにコピーしても動きません。 >それと拡張子をcgiにするのは.exeを.cgiにすればいいのでしょうか? >exeのほかにtdsとobjという拡張子のファイルがあるのですが・・・ > Linux上でコンパイルすると、名前を指定しなければ a.out という実行ファイルが できているはずです。これを hoge.cgi のように拡張子.cgiにします。 これはWEBサーバの設定によりますが、大抵 .cgi という拡張子がないと CGIプログラムとして実行できません。 objやtdsは中間ファイルだと思いますが・・・

gonntetu
質問者

補足

解りました! つまりOSがリナックスのサーバでプログラムを コンパイルする その後実行ファイルの拡張子を.cgiに 変更するということですよね? 今まではレンタルサーバだったので・・・ でもレンタルサーバの場合はどうなるのでしょうか? windows xpでコンパイルしてサーバにアップロードする以外 方法が思いつかないのですが・・・

  • angband
  • ベストアンサー率51% (86/168)
回答No.1

C言語は移植性に乏しい言語ですが、stdioのような標準的なライブラリだけで プログラムすれば、別のOSでも動くと思います。 #include <windows.h> のようにWindowsのライブラリを使うと、当然Linuxでは動きません。 ブラウザに出力するCGIプログラムを作りたいならばC言語はあまり適切では ないと思います。 どうしてもC言語でCGIプログラムを作りたいのであれば、サーバ上で開発できる 環境でないとつらいと思います。 プログラムの最初にContent-typeヘッダを出力するようにして、 サーバ上でコンパイルします。 おそらく実行ファイルは.cgiという名前を付ける必要があるでしょう。

gonntetu
質問者

補足

サーバでコンパイルとは 自宅サーバを立てて、サーバ用のパソコンで コンパイルする必要があるということでしょうか? それと拡張子をcgiにするのは.exeを.cgiにすればいいのでしょうか? exeのほかにtdsとobjという拡張子のファイルがあるのですが・・・

関連するQ&A

  • プログラミングの質問です。学校でLinuxを使ってプログラミングを授業

    プログラミングの質問です。学校でLinuxを使ってプログラミングを授業中にかじったのですが、 Windowsでのコンパイルの仕方がわからなくて困っています。 ちなみに下は、私がつくったものです #include <stdio.h> int main(void) { printf("あほじゃないの?"); return(0); }

  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • borlandについて

    こんばんは Borland C++ Compiler 5.5 を使っているのですが… _______________ |#include <stdio.h>      |←のようなプログラムをコンパイル |               | したら |int main(void) |1:インクルードファイル'stdio.h'を |{              | オープン出来ない | printf("Hello.\n");   |5:プロントタイプ宣言のない関数 | return 0;        | 'printf'の呼び出し(関数mein) |}              |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ と出てきますどうしたらよいでしょうか。

  • Linuxでプログラミング

    Windows7でVirtualBoxを利用してLinuxを使っています。 そのLinuxでC言語のプログラムをgccでコンパイルしたのですが、 error: stdio.h:No such file or directory In function main': 警告:incompatible implicit declaration of built-in function printf' と表示されます。プログラムは以下のような内容です。 #include<stdio.h> int main(void) { printf("hello,world\n"); return 0; } なぜエラーになってしまうのか分かりません。どうしたらよいのでしょうか? 他に何か必要な情報があれば答えます。よろしくお願いします。

  • APACHEのCGI-BINでC++のEXE実行

    APACHEをインストールしてCGI-BINに以下のプログラム #include <stdio.h> int main(){ printf("test"); return 0; } をコンパイルしたEXEファイルを置いてブラウザで参照したところInternal Server Errorでページが表示できません。testと表示したかったのですが・・・どうすればいいでしょうか?

  • borlandについてなんですが

    windows vista にBorland C++ Compiler 5.5をインストールし、説明が書いてあるサイトどおりに設定したんですけど、コンパイルすると エラーE2209 hello.c 1:インクルードファイル'stdio.h'をオープンできない 警告 W8065 hello.c 5: プロトタイプ宣言のない関数'printf'の呼び出し(関数 main) と出てコンパイルすることができません。 使用したプログラムは #include <stdio.h> int main(void) { printf("Hello.\n"); return 0; } です。 解る方いましたら教えてください。 よろしくお願いします。

  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

  • 一番最初でつまずいてます!!

    Borland C++Compilerをインストールしてプログラミングの勉強をし始めたばかりです。 #include<stdio.h> int main(void) { printf("はじめてのC言語プログラム"); return 0; } と入力してコンパイルすると 「インクルードファイル'stdio.h'をオープンできない」 というエラーがでました。 何度も見直したし、環境変数も合わせてるのになぜでしょうか!?

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎1----------------------------- #include<stdio.h> int main(void) { char ss[10]="AB"; printf("ss=%s\n",ss); return 0; } ------------------------------------ ◎2-------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss[0]='A'; ss[1]='B'; ss[2]=0; printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎3------------------------------- #include<stdio.h> #include<string.h> int main(void) { char ss[10]; strcpy(ss,"AB"); printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎4------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss="AB"; printf("ss=%s\n",ss); return 0; } ---------------------------------- 以上4つのプログラムで、◎2と◎3は正常に動くと理解できたのですが、何故、◎1は正常に動き、◎4は「'const char [3]' から 'char [10]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。