
おせわになってます
あの
#include<stdio.h>
int main( void )
{
printf("%d" , 1 + 2);
return 0;
}
というプログラムをつくり、
コンパイルし、EXEファイルを作って、
以前質問させて頂いたときに教えてもらった
サイトを見たのですが良くわかりませんでした
そのご、自分で調べてみたのですが
そこでさらに混乱してしまいました
このプログラムはwindowsとかunixとかその他のOSでも
動くのでしょうか?
そしてブラウザ上でこのプログラムの結果の
3を出力するにはどうすればいいのでしょうか?
この段階で行き住まっていて
何も進まない状況です
どうか教えてください
サーバのOSはlinuxでパソコンのOSはwindows xpです
A 回答 (4件)
- 最新から表示
- 回答順に表示
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を作りましょう。
また、汎用のコンパイルスクリプトは絶対に作ってはいけません。そんなことをするとセキュリティホールが出来てしまいます。
実際に運用するときには、データファイルのパーミッションにも注意しないといけないし、勉強することはたくさんありますが、まあやってみてください。
No.3
- 回答日時:
>その後実行ファイルの拡張子を.cgiに
>変更するということですよね?
>
そうですね。Linuxの場合は拡張子は意味がありませんが、WEBサーバである
apacheはCGIプログラムの認識を拡張子で行っています。なのでCGIとして
実行したいファイルだけ、.cgiを付けます。
>今まではレンタルサーバだったので・・・
>でもレンタルサーバの場合はどうなるのでしょうか?
>
普通はレンタルサーバでは、ログインしてコンパイルすることができないので、
C言語のCGIは敷居が高く、人気がありません。不便です。
ログインできるなら、ソースをアップロードしてコンパイルします。
それをCGI実行可能なWEB領域に配置すればOKです。
ログインできないならば、別のLinuxで実行ファイルを作ってからアップロード
しないといけません。
一番簡単なのは、PerlやPHP、Pythonなどのスクリプト言語でCGIプログラムを
作ることかと思いますけど・・
自宅サーバなんですか?
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は中間ファイルだと思いますが・・・
この回答への補足
解りました!
つまりOSがリナックスのサーバでプログラムを
コンパイルする
その後実行ファイルの拡張子を.cgiに
変更するということですよね?
今まではレンタルサーバだったので・・・
でもレンタルサーバの場合はどうなるのでしょうか?
windows xpでコンパイルしてサーバにアップロードする以外
方法が思いつかないのですが・・・
No.1
- 回答日時:
C言語は移植性に乏しい言語ですが、stdioのような標準的なライブラリだけで
プログラムすれば、別のOSでも動くと思います。
#include <windows.h>
のようにWindowsのライブラリを使うと、当然Linuxでは動きません。
ブラウザに出力するCGIプログラムを作りたいならばC言語はあまり適切では
ないと思います。
どうしてもC言語でCGIプログラムを作りたいのであれば、サーバ上で開発できる
環境でないとつらいと思います。
プログラムの最初にContent-typeヘッダを出力するようにして、
サーバ上でコンパイルします。
おそらく実行ファイルは.cgiという名前を付ける必要があるでしょう。
この回答への補足
サーバでコンパイルとは
自宅サーバを立てて、サーバ用のパソコンで
コンパイルする必要があるということでしょうか?
それと拡張子をcgiにするのは.exeを.cgiにすればいいのでしょうか?
exeのほかにtdsとobjという拡張子のファイルがあるのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# c言語 5 2023/04/27 13:20
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C/C++
-
実行?
-
bccでwinmm.libをリンクする方...
-
便利なライブラリorテクニック
-
C言語のコンパイルができません
-
コンパイル エラーについて
-
math.h
-
Win7 64bit のPCが'X86'と誤認識?
-
” OS ビルド ” の意味が分か...
-
LinuxC++ファイルWindowsでのmake
-
エラーに関する質問
-
clでのコンパイル結果を取得
-
PDBファイルが作成されないよう...
-
C++ リンクについて
-
初心者の質問
-
コンパイルができない!?
-
emacsの生産性について
-
C++のデフォルトinclude文?
-
関数形式マクロ
-
Pythonリリースコンパイル(app...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
C言語でヘッダファイルにグロー...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
Makefile作成時の拡張子.oとは?
-
外部シンボル "_main"は未解決です
-
<math.h>があるのにsqrtが・...
-
ILSpyで、デコンパイルできない。
-
クリティカルエラー Expressio...
-
【VC++6.0(MFC)】警告「LINK : ...
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
複数のサブディレクトリを一緒...
-
C言語のコンパイルができません
-
PRO*C コンパイルエラー
-
ExcelVBAで『ByRef 引数の型が...
-
コンパイルエラー:ユーザ定義...
-
プリコンパイルエラーについて
おすすめ情報