比較C說話中execv相干的履行文件的三個函數。本站提示廣大學習愛好者:(比較C說話中execv相干的履行文件的三個函數)文章只能為提供參考,不一定能成為您想要的結果。以下是比較C說話中execv相干的履行文件的三個函數正文
C說話execv()函數:履行文件函數
頭文件:
#include <unistd.h>
界說函數:
int execv (const char * path, char * const argv[]);
函數解釋:execv()用來履行參數path 字符串所代表的文件途徑, 與execl()分歧的處所在於execve()只需兩個參數, 第二個參數應用數組指針來傳遞給履行文件.
前往值:假如履行勝利則函數不會前往, 履行掉敗則直接前往-1, 掉敗緣由存於errno 中.
毛病代碼:請參考 execve ().
典范
/* 履行/bin/ls -al /etc/passwd */ #include <unistd.h> main() { char * argv[] = {"ls", "-al", "/etc/passwd", (char*)}; execv("/bin/ls", argv); }
履行:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
C說話execve()函數:履行文件函數
頭文件:
#include <unistd.h>
界說函數:
int execve(const char * filename, char * const argv[], char * const envp[]);
函數解釋:execve()用來履行參數filename 字符串所代表的文件途徑, 第二個參數系應用數組指針來傳遞給履行文件, 最初一個參數則為傳遞給履行文件的新情況變量數組.
前往值:假如履行勝利則函數不會前往, 履行掉敗則直接前往-1, 掉敗緣由存於errno 中.
毛病代碼:
EACCES:
1. 欲履行的文件不具有效戶可履行的權限.
2. 欲履行的文件所屬的文件體系是以noexec 方法掛上.
3. 欲履行的文件或script 翻譯器非普通文件.
EPERM:
1. 過程處於被追送形式, 履行者其實不具有root 權限, 欲履行的文件具有SUID 或SGID 位.
2. 欲履行的文件所屬的文件體系是以nosuid 方法掛上, 欲履行的文件具有SUID 或SGID 位元, 但履行者其實不具有root 權限.
E2BIG 參數數組過年夜
ENOEXEC 沒法斷定欲履行文件的履行文件格局, 有能夠是格局毛病或沒法在此平台履行.
EFAULT 參數filename 所指的字符串地址超越可存取空間規模.
ENAMETOOLONG 參數filename 所指的字符串太長.
ENOENT 參數filename 字符串所指定的文件不存在.
ENOMEM 焦點內存缺乏
ENOTDIR 參數filename 字符串所包括的目次途徑並不是有用目次
EACCES 參數filename 字符串所包括的目次途徑沒法存取, 權限缺乏.
ELOOP 過量的符號銜接
ETXTBUSY 欲履行的文件已被其他過程翻開並且正把數據寫入該文件中
EIO I/O 存取毛病
ENFILE 已到達體系所許可的翻開文件總數.
EMFILE 已到達體系所許可單一過程所能翻開的文件總數.
EINVAL 欲履行文件的ELF 履行格局不只一個PT_INTERP 節區
EISDIR ELF 翻譯器為一目次
ELIBBAD ELF 翻譯器有成績.
典范
#include <unistd.h> main() { char * argv[] = {"ls", "-al", "/etc/passwd", (char *)0}; char * envp[] = {"PATH=/bin", 0}; execve("/bin/ls", argv, envp); }
履行:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
C說話execvp()函數:履行文件函數
頭文件:
#include <unistd.h>
界說函數:
int execvp(const char *file, char * const argv []);
函數解釋:execvp()會從PATH 情況變量所指的目次中查找相符參數file 的文件名, 找到後便履行該文件, 然後將第二個參數argv 傳給該欲履行的文件。
前往值:假如履行勝利則函數不會前往, 履行掉敗則直接前往-1, 掉敗緣由存於errno 中.
毛病代碼:請參考 execve ()。
典范
/*請與execlp ()典范對比 */ #include <unistd.h> main() { char * argv[] = {"ls", "-al", "/etc/passwd", 0}; execvp("ls", argv); }
履行:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd