このCプログラムを実行できないのはなぜですか?


12

最初の「プロセス」プログラムを実行しようとしていますが、次のエラーが表示されます。

./fork.c: line 4: syntax error near unexpected token `('
./fork.c: line 4: `int main()'

私はコードが正しいと確信しています:

 #include <sys/types.h>
 #include <stdio.h>
 int main() {
     pid_t pid;
     printf("Hello fork()\n");
     switch(pid=fork())  {
         case -1: printf("Error by fork().....\n"); exit(0);
         case 0: printf("I'm the child process \n"); break;
         default: printf("I'm the dad \n"); break;
     }
  exit(0);
}

なにが問題ですか?


15
後であなた自身の正気のために、「休憩」を入れてください。「case -1:」行で。後で感謝します。また、子プロセスで_exit(0)を呼び出し、親プロセスでexit(0)を呼び出します。
ブルースエディガー

4
@BruceEdigerなぜ必要なの_exit?登録されているクリーンアップを行うことの何が問題になっていますか?
OrangeDog

4
exit(0)は、stdoutとstderrをフラッシュします。_exit(0)はしません。プログラムがfork()を実行するときにstdoutにいくつかのバイトがあり、子がexit(0)を呼び出すと、二重出力になる可能性があります。fork()がどのように機能するかを学習しているので、なぜ自分を混乱させるのですか?
ブルースエディガー

@BruceEdigerの仕組みの学習にfork()は、バッファされた出力をコピーできることの学習が含まれます。かなり複雑なシステムコールであるため、学習プロセスではおそらく混乱が必要です。
OrangeDog

回答:


67

ただ走ることはできません./fork.c。プログラムではありません。それはプログラムのソースです。を使用する./と、ファイルはスクリプトであると見なされ(そうではない)、それに応じて処理されます。

ただし、別の回答で述べたように、明示的にコンパイルせずにCコードを実行できるコンパイラ(Tiny C Compilerなど)があります。

Cプログラムなので、プログラムをコンパイルする必要があります。試してみてくださいcc -o fork fork.c、その後./fork、ここで機能しました。


Linuxの場合は、おそらくCCではなくGCCです。
Linuxios

6
ほとんどのLinuxシステムの@Linuxios ccは、へのシンボリックリンクgccです。
レナン

知っておくといい。Slarisのようなシステム上で何か他のものを指し示していますが、そうですか?
Linuxios

1
いくつかのSolarisボックスをチェックし、一方の/usr/bin/ccリンクと/opt/SUNWspro/bin/ccもう一方のリンクをチェックしました/opt/sunstudio12.1/bin/cc。とにかく、それはまだCコンパイラです。
OrangeDog

1
そして、HPUXボックスではになり/opt/ansic/bin/ccます。
OrangeDog

23

それはプログラムではなく、プログラムのソースコードです。

Cはコンパイルされた言語です。つまり、C を実行する前に、機械可読な命令に「コンパイル」する必要があります。Cを使用しているため、「Cコンパイラ」(cc)でこれを実行できます。

cc -o fork for.c   # compile the code
chmod +x fork      # ensure it it executable
./fork             # run the compiled program

複数のソースファイルと外部ライブラリを使用して、より複雑なプログラムに進むと、「GNUコンパイラコレクション」(gcc)を使用makeし、ソースコードを実行可能な実行可能ファイルに変換する方法を説明することになります。

この質問には、ソースコードを処理しようとしているスクリプトとコンパイルされたプログラムの違いに関するさまざまな情報が含まれています。


「コンパイラ」がツールの名前の一部である場合、私はそれを合理的に明示的に呼び出します。
OrangeDog

私が名前を挙げたツールは利用可能な唯一のものではないが、GNU / Linuxシステムではデフォルトで利用可能であり、広く使用されている可能性が高いことに注意してください。
OrangeDog

4
「必須」という言葉に関して、tccTiny C Compiler)は明示的にコンパイルせずにCコードを実行できます。pastebin.com/5FZiMpEn(再追加してコメントを編集しました。注文を台無しにしてすみません。)
manatwork
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.