execve(執(zhí)行文件)
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、漳縣網(wǎng)站維護、網(wǎng)站推廣。
在父進程中fork一個子進程,在子進程中調(diào)用exec函數(shù)啟動新的程序。exec函數(shù)一共有六個,其中execve為內(nèi)核級系統(tǒng)調(diào)用,其他(execl,execle,execlp,execv,execvp)都是調(diào)用execve的庫函數(shù)。
表頭文件
#includeunistd.h
定義函數(shù)
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
函數(shù)說明
execve()用來執(zhí)行參數(shù)filename字符串所代表的文件路徑,第二個參數(shù)是利用數(shù)組指針來傳遞給執(zhí)行文件,并且需要以空指針(NULL)結(jié)束,最后一個參數(shù)則為傳遞給執(zhí)行文件的新環(huán)境變量數(shù)組。
返回值
如果執(zhí)行成功則函數(shù)不會返回,執(zhí)行失敗則直接返回-1,失敗原因存于errno 中。
錯誤代碼 EACCES
1. 欲執(zhí)行的文件不具有用戶可執(zhí)行的權(quán)限。
2. 欲執(zhí)行的文件所屬的文件系統(tǒng)是以noexec 方式掛上。
3.欲執(zhí)行的文件或script翻譯器非一般文件。
EPERM
1.進程處于被追蹤模式,執(zhí)行者并不具有root權(quán)限,欲執(zhí)行的文件具有SUID 或SGID 位。
2.欲執(zhí)行的文件所屬的文件系統(tǒng)是以nosuid方式掛上,欲執(zhí)行的文件具有SUID 或SGID 位元,但執(zhí)行者并不具有root權(quán)限。
E2BIG 參數(shù)數(shù)組過大
ENOEXEC 無法判斷欲執(zhí)行文件的執(zhí)行文件格式,有可能是格式錯誤或無法在此平臺執(zhí)行。
EFAULT 參數(shù)filename所指的字符串地址超出可存取空間范圍。
ENAMETOOLONG 參數(shù)filename所指的字符串太長。
ENOENT 參數(shù)filename字符串所指定的文件不存在。
ENOMEM 核心內(nèi)存不足
ENOTDIR 參數(shù)filename字符串所包含的目錄路徑并非有效目錄
EACCES 參數(shù)filename字符串所包含的目錄路徑無法存取,權(quán)限不足
ELOOP 過多的符號連接
ETXTBUSY 欲執(zhí)行的文件已被其他進程打開而且正把數(shù)據(jù)寫入該文件中
EIO I/O 存取錯誤
ENFILE 已達(dá)到系統(tǒng)所允許的打開文件總數(shù)。
EMFILE 已達(dá)到系統(tǒng)所允許單一進程所能打開的文件總數(shù)。
EINVAL 欲執(zhí)行文件的ELF執(zhí)行格式不只一個PT_INTERP節(jié)區(qū)
EISDIR ELF翻譯器為一目錄
ELIBBAD ELF翻譯器有問題。
范例
#includeunistd.h
main()
{
char * argv[ ]={“l(fā)s”,”-al”,”/etc/passwd”,(char *)0};
char * envp[ ]={“PATH=/bin”,0}
execve(“/bin/ls”,argv,envp);
}
執(zhí)行
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
system()函數(shù)
如system("path"),在C中打印環(huán)境變量。
path
命令見path
/?
具體使用方法見下:
stdlib.h
int
system(const
char
*s)
system函數(shù)將字符串s傳遞給系統(tǒng)環(huán)境運行。如果s是NULL,如果存在命令處理器system返回非0。如果s非NULL,system返回的值與執(zhí)行的環(huán)境相關(guān)。
參考資料:the
C
programming
language
C語言編譯器本身需要環(huán)境變量支持,比如配置編譯器可執(zhí)行文件所在路徑需要設(shè)置path環(huán)境變量等。
這時可以通過在命令行中調(diào)用操作系統(tǒng)對應(yīng)設(shè)置環(huán)境變量的命令,實現(xiàn)設(shè)置。
a. 在windows/dos下,設(shè)置命令為set, 引用變量為%變量名%,于是設(shè)置path的可以寫作set path=xxxx;%path%,這樣就在path變量中增加了xxxx路徑。
在C語言運行中,需要設(shè)置環(huán)境變量。這時可以使用system函數(shù),調(diào)用系統(tǒng)命令來實現(xiàn)。
如
system("set my_env=env_string");
是在windows下增加一個my_env的環(huán)境變量,值為env_string。
而在linux下,該設(shè)置寫作
system("export my_env=env_string");
擴展資料:
C語言中環(huán)境變量操作
getenv(取得環(huán)境變量內(nèi)容)
相關(guān)函數(shù) putenv,setenv,unsetenv
putenv(改變或增加環(huán)境變量)
setenv(改變或增加環(huán)境變量)
對環(huán)境變量操作
#includestdlib.h
main()
{
char * p;
if((p=getenv(“USER”)))
printf(“USER =%s\n”,p);
setenv(“USER”,”test”,1);
printf(“USER=%s\n”,getenv(“USEr”));
unsetenv(“USER”);
printf(“USER=%s\n”,getenv(“USER”));
}
新聞標(biāo)題:c語言函數(shù)接收環(huán)境變量 c語言接受參數(shù)
URL鏈接:http://jinyejixie.com/article10/dopppgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、網(wǎng)站策劃、、營銷型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)