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