Linux 程序 exec函式族

2021-09-25 18:26:35 字數 3077 閱讀 1267

其他exec 函式

練習拓展dup2(dup to)函式

一:exec的簡介

1.**

fork建立程序後執行的是和父程序相同的程式(但有可能執行不同的**分支 ),子程序往往要呼叫一種exec函式執行另一種程式。當程序呼叫一種exec函式時,該程序的使用者空間**和資料完全被新程式替換,從新程式的啟動例程開始執行。呼叫exec並不建立新程序,所以呼叫exec前後該程序的id並未改變

將當前程序的.text、.data替換為所要載入的程式.text、.data,然後讓程序從新的.text第一條指令開始執行。但程序id不變。

2.種類

【函式名中字母含義小結】

字母全寫含義l

list

命令列引數列表

ppath

搜尋file時使用 path 變數

vvector

使用命令列引數陣列

eenvrionment

使用環境變數陣列,不使用程序原有的環境變數,設定新引導程式執行的環境變數

2.1:execlp函式:( 其中l代表list,p指代path)

載入乙個程序,借助path環境變數

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

函式狀態

返回值成功

無返回值

失敗-1

#include

#include

#include

intmain()

else

if(pid>0)

else

return0;

}

#include

#include

#include

intmain()

else

if(pid>0)

else

return0;

}

2.2:execl 函式
載入乙個程序,通過 程序+程式名 來載入

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

函式狀態

返回值成功

無返回值

失敗-1

execlp("ls","ls","-l","-f",null);

使用程式名在path 中搜尋

execl("/bin/ls","ls","-l","-f",null);

使用引數1給出的絕對路徑搜尋

#include

#include

#include

intmain()

else

if(pid>0)

else

return0;

}

其他exec 函式

2.3:execle函式(l:list,e:表示環境變數表)

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

2.4:execv(v:命令列引數的ar**)

int execv(const *path,char *const ar**);

#include

#include

#include

intmain()

else

if(pid>0)

else

;execv

("/bin/ls"

,ar**)

;//第二個引數可以隨便傳值,不會對程式功能造成影響

//之後的引數不可隨意改動

}return0;

}

2.5:execvp

int execvp(const char *file,char *const ar**);

2.6:execve

int execve(const char *path,char *const ar**,char *const envp);練習

1:示例1

ps aux > out.txt
拓展dup2(dup to)函式
把2這個檔案描述符拷貝到3中

dup2函式與exec函式的結合使用
#include

#include

#include

#include

intmain()

dup2

(fd,stdout_fileno)

;execlp

("ps"

,"ps"

,"ax"

,null);

//execlp函式成功不返回值,失敗返回-1;

// close(fd);

return0;

}

#include

#include

#include

#include

intmain()

dup2

(fd,stdout_fileno)

;execlp

("ps"

,"ps"

,"ax"

,null);

perror

("execlp error");

exit(1

);return0;

}

Linux程序 exec族函式

1 為什麼要使用exec族函式 當我們fork乙個子程序就是為了執行乙個新的程式,此時可以呼叫exec族函式,執行已經編譯好的可執行程式或者linux自帶的ls cd等命令。2 exec族函式如何使用 函式原型 include extern char environ intexecl const c...

程序 exec函式族

一 exec函式族 通過呼叫exec函式族實現讓父子程序執行不同的程式,父程序不會受影響。exec函式族,就是以exec為開頭的函式,比如execl函式 execlp函式等,所以稱它為exec函式族。l list 命令列引數列表 p path 搜尋file時的使用的path變數 v vector向量...

Linux程序之exec族函式

fork函式建立新程序後,經常會在新程序中呼叫exec函式去執行另外乙個程式。當程序呼叫exec函式時,該程序被完全替換為新程式。因為呼叫exec函式並不建立新程序,所以前後程序的id並沒有改變。原創鏈結 include include include 函式原型 int execl const ch...