1. 程式人生 > >Linux下execl函式學習

Linux下execl函式學習

Linux下標頭檔案
#include <unistd.h>
函式定義
int execl(const char *path, const char *arg, ...);
函式說明:
execl()其中字尾"l"代表list也就是引數列表的意思,第一引數path字元指標所指向要執行的檔案路徑, 接下來的引數代表執行該檔案時傳遞的引數列表:argv[0],argv[1]... 最後一個引數須用空指標NULL作結束。

函式返回值:
成功則不返回值, 失敗返回-1, 失敗原因存於errno中,可通過perror()列印

     #include <unistd.h>/*** File: execl.c**/
     #include <iostream>
     using namespace std;
     int main()
     {
       // 執行/bin目錄下的ls, 第一引數為程式名ls, 第二個引數為"-al", 第三個引數為"/etc/passwd"
       if(execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *) 0) < 0)
       {
           cout<<"execl error"<<endl;
       }
        else
       {
          cout<<"success"<<endl;
       }
       return 0;
     }

execl函式特點:

  當程序呼叫一種exec函式時,該程序完全由新程式代換,而新程式則從其main函式開始執行。因為呼叫exec並不建立新程序,所以前後的程序ID並未改變。exec只是用另一個新程式替換了當前程序的正文、資料、堆和棧段。

  用另一個新程式替換了當前程序的正文、資料、堆和棧段。

  當前程序的正文都被替換了,那麼execl後的語句,即便execl退出了,都不會被執行。