Linux系統的exec替換函式
fork函式建立子程序後,子程序往往要呼叫一種exec函式以執行另一個程式。
exec函式負責讀取可執行行檔案並將其載入地址空間開始執行。
我們有六種不同的exec函式可供使用,它們常常被統稱為exec函式。
下面這幾個是exec函式的庫函式,它們都依存於execve系統呼叫函式:
execve系統呼叫函式:
返回值:成功不返回,出錯返回-1
file引數:其中filename等於path,取路徑名為引數。file取檔名作為引數(函式會自行去PATH環境變數裡面找路徑)。
arg引數:其中以arg為名的都要求將新程式的每個命令列引數都說明為一個單獨的引數,最後以空指標結尾。
以argv[]為名的則應先構造一個指向各引數的指標陣列,然後將該陣列地址作為這三個函式的引數。
envp引數:允許構造一個環境變數的陣列。
使用演示:
因為六個函式使用起來類似,我只演示了execve函式,使用了路徑名,自己構造的argv和預設的envp環境變數。
執行結果:
可以看到ps -f的pid就是main函式的pid,說明ps -f就是main函式替換後的命令。
相關推薦
Linux系統的exec替換函式
fork函式建立子程序後,子程序往往要呼叫一種exec函式以執行另一個程式。 exec函式負責讀取可執行行檔案並將其載入地址空間開始執行。 我們有六種不同的exec函式可供使用,它們常常被統稱為exec函式。 下面這幾個是exec函式的庫函式,它們都依存於execve系統呼叫函式:
Linux中exec系列函式的應用
這段時間在研究linux中使用者登陸和shell執行程式的原理。我們知道,shell命令分為內部命令和外部命令,內部命令有諸如cd,history,exit,echo等,常見的外部命令有ls,ping,netstat等,通過type命令可以檢視一個命令是內部命令還是外部命令
linux 系統呼叫sysconf函式使用
在看開原始碼的時候,尤其是獲取cpu核數的時候,發現了一個很好用的一個函式 #include <unistd.h> long sysconf(int name); 通過名字可以猜到,該函式是獲取一些系統的引數。然後通過man sysconf 我
Linux系統呼叫--semctl函式詳解
【semctl系統呼叫】 功能描述: 在指定的訊號集或訊號集內的某個訊號上執行控制操作。 用法: #include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h> int semctl(int
Linux系統下fork函式的實驗
實驗 Linux下程序管理一、實驗目的1.掌握vim編譯器2.掌握gcc編譯器的使用3.瞭解fork()程式二、實驗工具與裝置1.實驗裝置:計算機(帶CD-ROM)一臺。三、實驗預備知識1. vim的編輯器使用語法:Vim <被編輯的檔名>Vim有三種模式:命令模
Linux系統呼叫--fcntl函式詳解
可以用fcntl 函式改變一個已開啟的檔案的屬性,可以重新設定讀、寫、追加、非阻塞等標誌(這些標誌稱為File StatusFlag),而不必重新open 檔案。#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int
Linux系統exec命令
shell 中的 exec 兩種用法: 1.exec 命令 ;命令代替shell程式,命令退出,shell 退出;比如 exec ls 2.exec 檔案重定向,可以將檔案的重定向就看為是shell程式的檔案重定向 比如 exec 5</dev/null;exe
Linux系統程式設計——程序替換:exec 函式族
在 Windows 平臺下,我們可以通過雙擊執行可執行程式,讓這個可執行程式成為一個程序;而在 Linux 平臺,我們可以通過 ./ 執行,讓一個可執行程式成為一個程序。 但是,如果我們本來就執行著一個程式(程序),我們如何在這個程序內部啟動一個外部程式,由核心將這個外部程式
linux系統程式設計-exec函式族
exec函式族 fork建立子程序後執行的是和父程序相同的程式(但有可能執行不同的程式碼分支),子程序往往要呼叫一種exec函式以執行另一個程式。 當程序呼叫一種exec函式時,該程序的使用者空間程式碼和資料完全被新程式替換,從新程式的啟動例程開始執行。 呼叫
Linux程序替換--函式 exec
對 fork 函式,我們知道是建立子程序的,那建立子程序幹嗎?一般有下面兩種情況: 一個父程序希望複製自己,使父程序和子程序同時執行不同的程式碼段。 一個程序要執行不同的程式,在這種情況下,子程序從 fork 返回之後立即呼叫 exec 系列 程序替換
PHP執行系統外部命令函式:exec()、passthru()、system()、shell_exec()
php提供4種方法執行系統外部命令:exec()、passthru()、system()、 shell_exec()。在開始介紹前,先檢查下php配置檔案php.ini中是有禁止這是個函式。找到 disable_functions,配置如下: disable_functions = 如果“dis
Linux系統程式設計---程序替換
程序替換 我們知道,在 Windows 平臺下,我們可以通過雙擊執行可執行程式,讓這個可執行程式成為一個程序;而在 Linux 平臺,我們可以通過 ./ 執行,讓一個可執行程式成為一個程序。 但是,如果我們本來就執行著一個程式(程序),我們如何在這個程序內部啟動一個外部程式,由核
Linux系統函式read()/write()/pread()/pwrite()的區別
轉載地址:https://blog.csdn.net/u013525455/article/details/52661313 在Linux和UNIX中有很多的輸入輸出函式,有時真是讓想跟它攀點關係的菜鳥們束手無策。先來看看都有哪些函式,通過解析與總結,看看能不能讓大家能這些函式有個理性的認識,哦
常見的linux系統函式
linux的系統呼叫是指是使用者程序通過gate和trap方式呼叫核心功能的介面 具體步驟 執行使用者程式(例如fork) 根據glibc函式實現取系統呼叫號並執行int $0x80產斷 進行址空間轉換堆疊切換執行SAVE_ALL(進行核心模式) 進行斷處理
Linux系統程式設計——淺談可重入函式與不可重入函式
在實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果有一個函式不幸被設計成為這樣:那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。 相反,肯定有一個安全的函式,這個安全的函式又叫可重入函式。那
Linux下exec函式詳解
exec核心函式呼叫 exec函式說明 exec函式的作用是執行一個檔案,他有很多同類型函式,對execl而言,所需要傳入的引數,第一個是檔案的絕對路徑,後面就是給要執行檔案傳入的引數,下面的程式,絕對路徑path="/mnt/nfs/hell",傳入的引數有4個
Linux系統呼叫函式strdup
Name strdup, strndup, strdupa, strndupa - duplicate a string 複製一個字串 Synopsis #include <string.h> char *strdup(const char *s);
linux系統呼叫函式 lstat--獲取檔案屬性
所需標頭檔案: #include<unistd.h> #include<sys/stat.h> #include<sys/types.h> 函式功能:用來獲取linux作業系統下檔案的屬性。 函式原型: int st
三十三、Linux 程序與訊號——中斷系統呼叫和函式可重入性
33.1 中斷系統呼叫 程序呼叫 “慢” 系統呼叫時,如果發生了訊號,核心會重啟系統呼叫。 慢系統呼叫 可能會永久阻塞的系統呼叫 從終端裝置、管道或網路裝置上的檔案讀取 向上述檔案寫入 某些裝置上的檔案開啟 pause 和 wait 系統呼叫
linux系統呼叫open、write、close、read以及stat函式詳解
學習筆記 參考連結1 、參考連結2以及百度百科 在進行C語言學習的時候我們瞭解到了C語言相關的一些IO操作,如fopen,fwrite,fread,fprintf,fclose等相關函式,他們都是由C庫函式提供的一些函式,是將作業系