其他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...