2013-04-21 36 views
0

我試圖執行文件使用forkexecvp,但我遇到一些錯誤。我還沒有找到任何解決方案,我在這裏在線,因爲我沒有從我的exevp中得到任何錯誤,也沒有運行。這裏是我的代碼:exevp跳過所有代碼,直到等待電話c

pid_t child; 
    int status; 
    child = fork(); 
    char *arg[3] = {"test","/home/ameya/Documents/computer_science/cs170/project1", (char*) 0}; 
    if(child == 0){ 
     printf("IN CHILD BEFORE EXECVP\n"); 
     int value = execvp(arg[0],arg); 
     if(value < 0){ 
      printf("ERROR\n"); 
     }else{ 
      printf("In Child : %i\n", value); 
     } 
    } 
    if(waitpid(child, &status, 0) != child){ 
     printf("ERROR IN PROCESS\n"); 
    } 
    printf("In Parent\n"); 

當我嘗試運行此代碼只輸出「兒童BEFORE EXCEPTION」和「父」它不會打印出任何的printf語句中爲什麼它之間去做。我正試圖運行一個簡單的可執行文件,將「hello world」打印到標準輸出中。

感謝所有幫助

回答

0

從手冊頁:

The exec() functions only return if an error has occurred.

所以,你execvp通話大概的工作,因此沒有返回。

exec函數的意義在於,它們用當前正在運行的代碼替換另一個程序的代碼,因此一旦程序運行完畢就會返回代碼,這是沒有意義的。

編輯:

它看起來像你沒有正確調用你的程序。我想你應該可以調用它像這樣:

char *arg[3] = {"test", (char*) 0}; 
int value = execvp("/home/ameya/Documents/computer_science/cs170/project1/test", arg); 
+0

由於這是有道理的,我沒有看到「Hello World」的輸出是因爲我還沒有從我的子進程重定向輸出,我的理由假設? – 2013-04-21 22:21:25

+0

@AmeyaSavale不,你應該看到輸出...你想運行'test'程序嗎? – Xymostech 2013-04-21 22:53:42

+0

是的,我做了,它打印出「你好世界」,該程序只有一個打印出該行的主,不需要讀取使用管道的子進程的輸出? – 2013-04-21 22:56:45