2015-12-01 41 views
0

我試圖創建一個簡單的程序,允許執行基本的 shell命令。問題在於execve每次都會掛起。調用ls和其他使用execve

赫雷什的代碼:

char* arglist[]={"ls","-l",NULL}; 
    char* env[]={NULL}; 
    int status; 
    while (1) 
    { 
     if (fork() != 0) 
     { 
      waitpid(-1, &status, 0); 
     } 
     else 
     { 
      execve(arglist[0],arglist,env); 
     } 
    } 
    return 0; 
} 
+0

應該是'如果(叉()> 0)'因爲'叉'可能會失敗 –

+1

這與'bash'無關。 'ls'不是「shell命令」,它只是一個命令。 (它是在POSIX規範的「shell和utilities」一節中指定的,是的,但它是一個實用程序,而不是shell的一部分)。 –

+0

...另外,當在C中工作時,總是檢查你的返回值(適當的時候是'errno'),並在不成功時調用'perror';如果你看過錯誤信息,你可能不需要問這個問題。 –

回答

2

第一參數應該是一個完整路徑二進制你執行:

char* arglist[]={"/bin/ls", "-l", NULL}; 
+0

謝謝!有用。我怎樣才能讓它在沒有完整路徑的情況下工作? – susdu

+0

你不能。 'execve()'需要完整的路徑。 –

+1

使用[execvp(3)](http://man7.org/linux/man-pages/man3/execvp.3.html) –