電子書籍の厳選無料作品が豊富!

おせわになってます
あの
#include<stdio.h>

int main( void )
{
printf("%d" , 1 + 2);

return 0;
}
というプログラムをつくり、
コンパイルし、EXEファイルを作って、
以前質問させて頂いたときに教えてもらった
サイトを見たのですが良くわかりませんでした
そのご、自分で調べてみたのですが
そこでさらに混乱してしまいました

このプログラムはwindowsとかunixとかその他のOSでも
動くのでしょうか?

そしてブラウザ上でこのプログラムの結果の
3を出力するにはどうすればいいのでしょうか?

この段階で行き住まっていて
何も進まない状況です

どうか教えてください

サーバのOSはlinuxでパソコンのOSはwindows xpです

A 回答 (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を作りましょう。

また、汎用のコンパイルスクリプトは絶対に作ってはいけません。そんなことをするとセキュリティホールが出来てしまいます。
実際に運用するときには、データファイルのパーミッションにも注意しないといけないし、勉強することはたくさんありますが、まあやってみてください。
    • good
    • 0

>その後実行ファイルの拡張子を.cgiに


>変更するということですよね?
>
そうですね。Linuxの場合は拡張子は意味がありませんが、WEBサーバである
apacheはCGIプログラムの認識を拡張子で行っています。なのでCGIとして
実行したいファイルだけ、.cgiを付けます。

>今まではレンタルサーバだったので・・・
>でもレンタルサーバの場合はどうなるのでしょうか?
>
普通はレンタルサーバでは、ログインしてコンパイルすることができないので、
C言語のCGIは敷居が高く、人気がありません。不便です。

ログインできるなら、ソースをアップロードしてコンパイルします。
それをCGI実行可能なWEB領域に配置すればOKです。

ログインできないならば、別のLinuxで実行ファイルを作ってからアップロード
しないといけません。

一番簡単なのは、PerlやPHP、Pythonなどのスクリプト言語でCGIプログラムを
作ることかと思いますけど・・

自宅サーバなんですか?

この回答への補足

ありがとうございます
解りました!

サーバはレンタルサーバです

補足日時:2005/07/08 18:51
    • good
    • 0

>サーバでコンパイルとは


>自宅サーバを立てて、サーバ用のパソコンで
>コンパイルする必要があるということでしょうか?
>
開発環境は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でコンパイルしてサーバにアップロードする以外
方法が思いつかないのですが・・・

補足日時:2005/07/08 00:53
    • good
    • 0

C言語は移植性に乏しい言語ですが、stdioのような標準的なライブラリだけで


プログラムすれば、別のOSでも動くと思います。

#include <windows.h>

のようにWindowsのライブラリを使うと、当然Linuxでは動きません。
ブラウザに出力するCGIプログラムを作りたいならばC言語はあまり適切では
ないと思います。

どうしてもC言語でCGIプログラムを作りたいのであれば、サーバ上で開発できる
環境でないとつらいと思います。

プログラムの最初にContent-typeヘッダを出力するようにして、
サーバ上でコンパイルします。
おそらく実行ファイルは.cgiという名前を付ける必要があるでしょう。

この回答への補足

サーバでコンパイルとは
自宅サーバを立てて、サーバ用のパソコンで
コンパイルする必要があるということでしょうか?

それと拡張子をcgiにするのは.exeを.cgiにすればいいのでしょうか?
exeのほかにtdsとobjという拡張子のファイルがあるのですが・・・

補足日時:2005/07/08 00:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!