[英]execvp() wont load file: “No such file or directory”
我寫了2個程序。 第一個通過 argv 獲取 2 個字符串並打印程序進程 id 和最小的字符串(按字典順序)。
int main(int argc,char **argv) {
int cmp;
if (argc != 3){
perror("Wrong arguments");
exit(EXIT_FAILURE);
}
printf("my ID: %d\n",getpid());
cmp = strcmp(argv[1],argv[2]);
if (cmp < 0)
puts(argv[1]);
else if (cmp > 0)
puts(argv[2]);
else puts(argv[1]);
exit(EXIT_SUCCESS);
}
我已經通過終端編譯了代碼:
gcc -Wall my_cmp.c -o my_cmp
第二個程序創建一個子進程並使用my_cmp
發送“abc”“de”執行execvp()
。
void do_sun(char **argv);
int main() {
pid_t status;
char *args[] = { "my_cmp", "abc","de", NULL };
status = fork();
if (status < 0){
perror("Cannot fork");
exit(EXIT_FAILURE);
}
if (status == 0){
char *args[] = { "my_cmp", "abc","de", NULL };
do_sun(args);
exit(EXIT_SUCCESS);
}
if (status > 0){
wait(&status);
if (execvp(args[0],args) != 0 )
perror("error");
exit(EXIT_SUCCESS);
}
exit(EXIT_SUCCESS);
}
void do_sun(char **args){
if (execvp(args[0],args) == -1 )
perror("error");
exit(EXIT_SUCCESS);
}
當我運行程序時,我收到以下消息:
error: No such file or directory
error: No such file or directory
我試圖將目錄切換到 my_cmp 文件,但沒有成功。
在某些系統上,默認情況下它不會在工作目錄中搜索可執行二進制文件。
您應該使用./my_cmp
而不是my_cmp
讓它在這樣的系統上工作。
如果您使用execv p
,則表示將在“路徑中”找到可執行文件; 也就是說,在$PATH
中列出的目錄之一中。 這條路徑上很少有目錄,雖然可以添加.
到$PATH
,這通常被認為是一個安全漏洞。
如果要指定可執行文件的路徑(在這種情況下,您可以將其放在您想要的任何目錄中),請使用非路徑execv
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.