2015-04-04 30 views
0

我想寫的是創建一個子進程AC腳本,並根據返回它將打印一個消息,我寫到目前爲止代碼:意外的標記「(」在C腳本

#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <sys/types.h> 

int main() 
{ 
pid_t child_pid; 
printf ("the main program process ID is %d\n", (int) getpid()); 
child_pid = fork() ; 
if (child_pid==0){ 
    printf("this is the child process,with the id %d\n",(int) child_pid); 
} 
else 
    printf("this is the parent process with id %d\n",(int) getpid()); 

return 0; 
} 

當我嘗試編譯它,它似乎是OK可是當我在終端上運行它,我得到以下錯誤:?

./lab7.c: line 6: syntax error near unexpected token `(' 
./lab7.c: line 6: `int main()'" 

有人可以幫我告訴我什麼,我做錯了

+1

下一個問題:爲什麼「的主要程序...」字符串獲得兩次印刷? – 2015-04-04 15:07:56

+0

你如何編譯?在我的linux-box這個代碼編譯成功 – 2015-04-04 15:08:01

+0

與你的問題無關,但你應該檢查你的邏輯更接近一點......如果'child_pid'等於零,你有'if'檢查,如果是你打印出來的值'child_pid'。,這意味着孩子將始終打印它有pid零。 – 2015-04-04 15:08:43

回答

2

這聽起來像你重新執行源代碼作爲一個腳本而不是一個可執行文件,而且,毫不奇怪,無論你在哪個shell都不喜歡它。

您需要先編譯代碼,然後執行編譯結果。例如,在這裏我們編譯生產第一線命名爲lab7可執行文件,並在第二次執行:

gcc -Wall -Wextra lab7.c -o lab7 
./lab7 
+0

這似乎工作。總之它打印的東西。你可以解釋一下什麼-Wall -Wextra和a.out手段。因爲現在我用gcc編譯 - o lab7 lab7.c - 我在學校學到的方法 – 2015-04-04 15:10:54

+0

@DamianAlex默認情況下,'gcc'會編譯有各種問題的代碼。 「牆」意味着像「所有警告」。但這還不夠。 'Wextra'的意思是「所有警告,再加上一些」。即使這還不夠,但這是一個很好的起點。從長遠來看,它會爲你節省很多的痛苦。如果您在* nix平臺上,請嘗試'man gcc'或'gcc --help'。 – juanchopanza 2015-04-04 15:13:05

+0

gcc -Wall -Wextra lab7.c -o lab7 ./lab7這個工程 – 2015-04-04 15:20:07