Linux下的exec函式

2021-08-01 04:44:02 字數 3537 閱讀 1369

在程序間的程式替換

用fork建立子程序後執行的是和父程序相同的程式(但有可能執⾏行不同的**分⽀支),

子程序往往要呼叫一種exec函式以執⾏行另⼀乙個程式。

當程序呼叫一種exec函式時,該程序的使用者空間**和資料完全被新程式替換,從新程式的啟動例程開始執行。

呼叫exec並後該程序的id並未改變。不建立新程序,所以呼叫exec前後該程序的id並未改變。因此在task_struct中的其他資訊並沒有發生改變

其實有六種以exec開頭的函式,統稱exec函式:

#include 

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 *path, char *const argv, char *const envp);

1、使用execl:

帶有字母l(表⽰示list)的exec函式要求將新程式的每個命令列引數都當作乙個引數傳給 它,命令列 引數的個數是可變的,因此函式原型中有…,…中的最後⼀乙個可變引數應該是 null, 起sentinel的作用

#include

#include

#include

int main()

else

}return

0;}

執行結果:

[admin@localhost linux8]$ ./wait

child start!

total 24

1054015 drwxrwxr-x. 2 500 500 4096 may 10 01:18 .

1053939 drwxrwxr-x. 7 500 500 4096 may 9 20:39 ..

1054019 -rw-rw-r–. 1 500 500 65 may 9 20:41 makefile

1054018 -rwxrwxr-x. 1 500 500 5224 may 10 01:18 wait

1054021 -rw-rw-r–. 1 500 500 2099 may 10 01:18 wait.c

wait child success!

在子程序中進行了程式的替換也就是ls程式的**和資料替換了子程序的**和資料

2、使用int execlp(const char *file, const char *arg, …);

不用加具體路徑

不帶字母p(表⽰示path)的exec函式 第⼀乙個引數必須是程式的相對路徑或絕對路徑,例如 「/bin/ls」或」./a.out」,⽽而不能 是」ls」或」a.out」。對於帶字母p的函式: 如果引數中包含/,則 將其視為路徑名。 否則視為不帶路徑的程式名,在path環境變數的⽬目錄列表中搜尋這 個程式

帶有字母v(表⽰示vector)的函式,則應該先構造⼀乙個指向各引數的指標數 組,然後將該數 組的⾸首位址當作引數傳給它,陣列中的最後⼀乙個指標也應該是null,就像main函式 的 argv引數或者環境變數表⼀樣。

帶有字母v(表⽰示vector)的函式,則應該先構造⼀乙個指向各引數的指標數 組,然後將該數 組的⾸首位址當作引數傳給它,陣列中的最後⼀乙個指標也應該是null,就像main函式 的 argv引數或者環境變數表⼀一樣。

不帶字母p(表⽰示path)的exec函式 第⼀乙個引數必須是程式的相對路徑或絕對路徑,例如 「/bin/ls」或」./a.out」,⽽而不能 是」ls」或」a.out」。對於帶字母p的函式: 如果引數中包含/,則 將其視為路徑名。 否則視為不帶路徑的程式名,在path環境變數的⽬目錄列表中搜尋這 個程式。

對於以e(表⽰示environment)結尾的exec函式,可以把乙份新的環境變數表傳給它,其他 exec函式 仍使⽤用當前的環境變數表執行新程式

linux下exec函式族

1.1 exec函式族相關函式 include extern char environ int execl const char path,const char arg,char null int execlp const char file,const char arg,char null int...

Linux系統下的 exec系列函式

1 exec函式說明 fork函式是用於建立乙個子程序,該子程序幾乎是父程序的副本,而有時我們希望子程序去執行另外的程式,exec函式族就提供了乙個在程序中啟動另乙個程式執行的方法。它可以根據指定的檔名或目錄名找到可執行檔案,並用它來取代原呼叫程序的資料段 段和堆疊段,在執行完之後,原呼叫程序的內容...

linux下的exec命令

shell 中的 exec 兩種用法 1.exec 命令 命令代替shell程式,命令退出,shell 退出 比如 exec ls 2.exec 檔案重定向,可以將檔案的重定向就看為是shell程式的檔案重定向 比如 exec 5shell的內建命令exec將並不啟動新的shell,而是用要被執行命...