execve的使用方法

2021-05-22 14:09:43 字數 3539 閱讀 2672

execve(引數1,引數2,引數3)

引數1:命令所在路徑

引數2:命令的集合

引數3:傳遞給執行檔案的環境變數集

exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,

exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改變,

和呼叫exec函式的程序一樣。

int   exec…裝入和執行其它程式:

int   execl(  char *pathname,char *arg0,char *arg1,...,char *argn,null)

int   execle( char *pathname,char *arg0,char *arg1,...,char *argn,null,char *envp)

int   execlp( char *pathname,char *arg0,char *arg1,...,null)

int   execlpe(char *pathname,char *arg0,char *arg1,...,null,char *envp)

int   execv(  char *pathname,char *argv)

int   execve( char *pathname,char *argv,char *envp)

int   execvp( char *pathname,char *argv)

int   execvpe(char *pathname,char *argv,char *envp)

exec函式族裝入並執行程式pathname,並將引數

arg0(arg1,arg2,argv,envp)傳遞給子程式,出錯返回-1

在exec函式族中,字尾l、v、p、e新增到exec後,

所指定的函式將具有某種操作能力

有字尾  p時,函式可以利用dos的path變數查詢子程式檔案。

假如你希望執行命令 /bin/cat /etc/passwd /etc/group,

l時,希望接收以逗號分隔的引數列表,列表以null指標作為結束標誌

execl( "/bin/cat","/etc/passed","/etc/group",null);

v時,希望接收到乙個以null結尾的字串陣列的指標

char* argv =

execv( "/bin/cat", argv );

e時,函式傳遞指定引數envp,允許改變子程序的環境,無字尾e時,子程序使用當前程式的環境。

envp也是乙個以null結尾的字串陣列指標

execl(執行檔案)

相關函式

fork,execle,execlp,execv,execve,execvp

表頭檔案

#include

定義函式

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

函式說明

execl()用來執行引數path字串所代表的檔案路徑,接下來的引數代表執行該檔案時傳遞過去的argv(0)、argv[1]……,最後乙個引數必須用空指標(null)作結束。

返回值如果執行成功則函式不會返回,執行失敗則直接返回-1,失敗原因存於errno中。

範例#include

main()

執行/*執行/bin/ls -al /etc/passwd */

-rw-r--r-- 1 root root 705 sep 3 13 :52 /etc/passwd

execlp(從path 環境變數中查詢檔案並執行)

相關函式

fork,execl,execle,execv,execve,execvp

表頭檔案

#include

定義函式

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

函式說明

execlp()會從path 環境變數所指的目錄中查詢符合引數file的檔名,找到後便執行該檔案,然後將第二個以後的引數當做該檔案的argv[0]、argv[1]……,最後乙個引數必須用空指標(null)作結束。

返回值如果執行成功則函式不會返回,執行失敗則直接返回-1,失敗原因存於errno 中。

錯誤**

參考execve()。

範例/* 執行ls -al /etc/passwd execlp()會依path 變數中的/bin找到/bin/ls */

#include

main()

執行-rw-r--r-- 1 root root 705 sep 3 13 :52 /etc/passwd

execv(執行檔案)

相關函式

fork,execl,execle,execlp,execve,execvp

表頭檔案

#include

定義函式

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

函式說明

execv()用來執行引數path字串所代表的檔案路徑,與execl()不同的地方在於execve()只需兩個引數,第二個引數利用陣列指標來傳遞給執行檔案。

返回值如果執行成功則函式不會返回,執行失敗則直接返回-1,失敗原因存於errno 中。

錯誤**

請參考execve()。

範例執行

-rw-r--r-- 1 root root 705 sep 3 13 :52 /etc/passwd

execve(執行檔案)

相關函式

fork,execl,execle,execlp,execv,execvp

表頭檔案

#include

定義函式

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

函式說明

execve()用來執行引數filename字串所代表的檔案路徑,第二個引數系利用陣列指標來傳遞給執行檔案,

argv要傳遞給程式的完整引數列表,包括argv[0],它一般是執行程式的名字;最後乙個引數則為傳遞給執行檔案的新環境變數陣列。

返回值如果執行成功則函式不會返回,執行失敗則直接返回-1,失敗原因存於errno 中。

錯誤**

eacces

1. 欲執行的檔案不具有使用者可執行的許可權。

2. 欲執行的檔案所屬的檔案系統是以noexec 方式掛上。

3.欲執行的檔案或script翻譯器非一般檔案。

eperm

1.程序處於被追蹤模式,執行者並不具有root許可權,欲執行的檔案具有suid 或sgid 位。

2.欲執行的檔案所屬的檔案系統是以nosuid方式掛上,欲執行的檔案具有suid 或sgid 位元,但執行者並不具有root許可權

[root@localhost src]# gcc execve.c

[root@localhost src]# ./a.out

a.out  child_fork.c  execve.c  fork.c  getpid.c 

execve的使用說明

execve函式作用是執行乙個新的程式,程式可以是二進位制的可執行程式,也可以是shell pathon指令碼 標頭檔案上是unistd.h 函式原型 int execve const char filename,char const ar char const envp 引數介紹 filename...

pythonpip使用方法 pip使用方法整理

匯出專案已安裝的pip包 pip list 檢視專案中安裝的包 pip freeze requirements.txt 將專案中所用到的第三方庫輸出到requirements.txt中 pip install 版本號 pip install i 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...

機械秒錶的使用方法 秒錶的使用方法!

秒錶是一種常用的測時儀器。又可稱 機械停表 由暫停按鈕 發條柄頭 分針等組成。它是利用擺的等時性控制指標轉動而計時的。它是利用擺的等時性控制指標轉動而計時的。在它的正面是乙個大表盤,上方有乙個小表盤 圖1.4 2 秒針沿大表盤轉動,分針沿小表盤轉動。分針和秒針所指的時間和就是所測的時間間隔。在表正上...