이 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)이 있어야합니다.
Bruce Ediger

4
@BruceEdiger 왜 필요한가 _exit? 등록 된 정리를 수행하는 데 어떤 문제가 있습니까?
OrangeDog

4
exit (0)은 stdout 및 stderr을 플러시합니다. _exit (0)은 그렇지 않습니다. 프로그램이 fork ()를 수행 할 때 stdout에 약간의 바이트가 있고 자식이 exit (0)을 호출하면 이중 출력으로 끝날 수 있습니다. fork ()가 어떻게 작동하는지 배우기 때문에 왜 자신을 혼동합니까?
Bruce Ediger

@BruceEdiger 학습 방법 fork()에는 버퍼링 된 출력을 복사 할 수있는 학습이 포함됩니다. 상당히 복잡한 시스템 호출이기 때문에 학습 과정에서 약간의 혼란이 필요할 수 있습니다.
OrangeDog

답변:


67

당신은 단지 실행할 수 없습니다 ./fork.c. 프로그램이 아닙니다. 프로그램 의 소스 입니다. Using ./는 파일이 스크립트가 아니라고 가정하고 그에 따라 처리합니다.

그러나 다른 답변에서 언급했듯이 C 코드를 명시 적으로 컴파일하지 않고 실행할 수 있는 컴파일러 (예 : Tiny C Compiler )가 있습니다.

C 프로그램이므로 프로그램을 컴파일해야합니다. cc -o fork fork.c그런 다음 시도하십시오 ./fork; 여기에서 일했습니다.


그리고 Linux에서 CC가 아닌 GCC 일 것입니다.
Linuxios

6
대부분의 Linux 시스템에서 @Linuxios cc는에 대한 심볼릭 링크 gcc입니다.
Renan

알아 둘만 한. Slaris와 같은 시스템에서는 다른 점을 지적하지만 그렇지 않습니까?
Linuxios

1
그냥 솔라리스 상자, 그리고 몇 가지 검사 /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 컴파일러"( cc)가이를 수행 할 수 있습니다.

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

여러 소스 파일과 외부 라이브러리를 사용하여보다 복잡한 프로그램으로 넘어갈 때 "GNU Compiler Collection"( gcc) make을 사용하여 소스 코드를 작동 가능한 실행 파일로 바꾸는 방법을 설명 할 것입니다.

이 질문 에는 소스 코드를 처리하려는 스크립트와 컴파일 된 프로그램의 차이점에 대한 다양한 정보가 있습니다.


만약 "컴파일러"가 툴 이름의 일부라면, 나는 그것을 상당히 명백하게 부를 것입니다.
OrangeDog

필자가 지정한 도구는 유일하게 사용할 수있는 도구는 아니지만 GNU / Linux 시스템에서 기본적으로 사용 가능할 가능성이 높으며 널리 사용됩니다.
OrangeDog

4
이 "필수"단어와 관련하여 tcc( Tiny C Compiler )는 C 코드를 명시 적으로 컴파일하지 않고도 실행할 수 있습니다. pastebin.com/5FZiMpEn (댓글을 다시 추가하여 댓글을 수정 함. 주문 내용을 유감스럽게 생각합니다.)
manatwork
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.