execlp使用例子 exec的6種不同使用格式

2021-10-14 07:21:31 字數 1530 閱讀 7737

經過前幾章的了解我們對程序的建立和結束有了了解。

那麼我們知道fork函式建立的程序只是將父程序的環境複製到新程序中,而沒有用新程式來初始化建立的子程序,因此,它並不能執行乙個新的目標程式,而這一點又是程式設計時所必須的,為此linux系統提供了exec系統呼叫。

exec函式有6種不同的使用格式,但是核心中只對應乙個入口,不同之處在於不同格式有不同的名字和呼叫函式,這6種呼叫在標頭檔案unistd.h中,格式如下:

int execl (const char *__path, const char *__arg, ...)

int execv (const char *__path, char *const __ar**)

int execle (const char *__path, const char *__arg, ...)

int execve (const char *__path, char *const __ar**, char *const __envp)

int execlp (const char *__file, const char *__arg, ...)

int execvp (const char *__file, char *const __ar**)

上面的引數path指出乙個可執行目標檔案的路徑名,引數file指出可執行目標檔案的檔名,arg作為約定,同path一樣指出目標檔案的路徑名,引數ar**是乙個字元指標陣列,由它指出該目標程式使用的命令列參數列,按約定第乙個字元指標指向與path或file相同的字串,最後乙個envp與ar**一樣也是乙個字元指標陣列,由它指出該目標程式執行是的程序環境,它也以乙個空指標結束。

呼叫成功時exec不返回,從而不執行exec以後的所有語句,失敗時返回-1;

exec的6種格式在以下3點上有所不同:

1、 path是乙個目標檔案的完整路徑名,而file是目標檔名,它可以通過環境變數path來搜尋;

2、 有path或file指定的目標檔案的命令列引數是完整的引數列表還是通過指標陣列ar**來給出的;

3、 環境變數是系統自動傳遞還是通過envp傳遞的;

下表說明了exec函式的6種不同格式對以上3點的支援

接下來我們來看乙個簡單的例子,來簡單的使用下exec函式:

然後我們再將上圖中的12行的execl換成execlp,會列印出什麼呢?

可以看到exec呼叫成功了,由此可見execl和execlp這兩個函式可以替換使用,但需注意的是execlp中指定的目標檔名必須在path所定義的某個路徑名之下。

exec函式 python 使用exec的疑惑

簡介 exec 執行儲存在字串或檔案中的python語句,相比於 eval,exec可以執行更複雜的 python exec函式功能強大,也很容易上手,在做未知變數定義時很好用。例如 使用exec函式可以將其中的字串語句定義為變數 with open data.txt r as f for line...

exec函式族的使用

呼叫shell指令碼命令 execlp sh sh filename char 0 exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改變,和呼叫exec函式的程序一樣...

exec函式族的使用

exec函式族的使用 exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改變,和呼叫exec函式的程序一樣。下面來看下exec函式族 include int execl...