2013-09-26 39 views
0

這是我的代碼:如何返回控件窗體exec?

void function_exists(int foo) 
{ 
    char bar[10] = "/bin/"; 
    int baz; 
    strncat(bar,act_arg[0],sizeof(act_arg[0])); 
    if(fork() == 0) 
    { 
     printf("\n"); 
     baz = execlp(bar,act_arg[0],NULL); 
     if(baz == -1) 
     { 
      foo++; 
      wait(NULL); 
     } 
     else 
     { 
      wait(NULL); 
      exit(0); 
     } 
    } 
    fflush(stdout); 
    printf("Hello"); 
} 

我試圖返回從execlp控制,我知道,除非有,所以我使用的fork.But當我執行的代碼中的錯誤不會返回一個值你好先打印。爲什麼會發生?

而且

是有辦法,我可以使exec返回時或任何其他系統調用,它同樣的事情me.Right現在我按回車鍵和我的程序接管,但我想這樣做,而不必按下輸入。

我沒有足夠的代表處,以使這裏發表圖片是我的輸出鏈接: http://tinypic.com/r/6szw52/5

+1

你可以嘗試popen()而不是exec。 – Nika

+0

我看着它,發現一個地方,我可以使用這個,所以謝謝q先生 – user2626335

回答

0

當你調用execlp子進程面積將execlp被覆蓋,所以可用代碼後execlp將不會執行。

等待在主循環中,你可以達到預期的效果。

檢查此代碼,你會得到更多的想法。

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc, char *argv[]) 
{ 
    pid_t child; 
    child = fork(); 
    if(child == 0) { 
    printf("at child\n"); 
     execlp("./hello",argv[0],NULL); 
    printf("after execlp in child\n\n"); 
    sleep(2); 
    } 
    else { 
    wait(NULL); 
    printf("parrent finish\n"); 
    } 
    return 0; 
} 

的printf execlp不會執行後可用。