Linux exec方法族簡單用法


MAN (Manual pager utils) :
       execl, execlp, execle, execv, execvp ,execve- execute a file

       #include <unistd.h>

       extern char **environ;

       int execl(const char *path, const char *arg, ...);


       int execlp(const char *file, const char *arg, ...);


       int execle(const char *path, const char *arg, ..., char * const envp[]);

       int execv(const char *path, char *const argv[]);


       int execvp(const char *file, char *const argv[]);

      int execve(const char *filename, char *const argv[], char *const envp[]);

六個函數的都是以exec四個字母開頭的,後面的字母表示了其用法上的區別:
帶有字母“l”的函數,表明後面的參數列表是要傳遞給程序的參數列表,參數列表的第一個參數必須是要執行程序,最後一個參數必須是NULL

帶有字母“p”的函數,第一個參數可以是相對路徑或程序名,如果無法立即找到要執行的程序,那麼就在環境變量PATH指定的路徑中搜索。其他函數的第一個參數則必須是絕對路徑名。

帶有字母“v”的函數,表明程序的參數列表通過一個字符串數組來傳遞。這個數組和最後傳遞給程序的main函數的字符串數組argv完全一樣。第一個參數必須是程序名,最後一個參數也必須是NULL。

帶有字母“e”的函數,用戶可以自己設置程序接收一個設置環境變量的數組。


execl("/bin/ls", "-al", (char*)0);

-------------------------------------------------

   char *envp[] = {"-al", "."};
   execle("/bin/ls","ls",  NULL, envp);

------------------------------------------------ 
execlp("ls", "ls", "-l", ".", NULL );

----------------------------------------- 


char*evnp[] = {"ls", "-al", NULL};
execvp("ls", evnp);
--------------------------------------------------------------------------

char*envp[] = {"ls","-l", ".",NULL};
 execv("/bin/ls",  envp);
--------------------------------------------------------------------------

char*argv[] ={"ls", "-l",".", NULL};
char*envp[] ={ NULL};
execve("/bin/ls", argv, envp);

發佈了24 篇原創文章 · 獲贊 53 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章