execvp() 不会加载文件:"No such file or directory"
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
第二个程序创建一个子进程并执行 execvp()
并 my_cmp
发送“abc”“de”。
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<b>p</b>
,您是说可执行文件将在“路径中”找到;也就是说,在 $PATH
中列出的目录之一中。此路径上的目录很少,虽然可以将 .
添加到 $PATH
,但通常认为这是安全漏洞。
如果您想指定可执行文件的路径(在这种情况下您可以将其放在您想要的任何目录中),请使用非路径 execv
.
我写了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
第二个程序创建一个子进程并执行 execvp()
并 my_cmp
发送“abc”“de”。
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<b>p</b>
,您是说可执行文件将在“路径中”找到;也就是说,在 $PATH
中列出的目录之一中。此路径上的目录很少,虽然可以将 .
添加到 $PATH
,但通常认为这是安全漏洞。
如果您想指定可执行文件的路径(在这种情况下您可以将其放在您想要的任何目录中),请使用非路径 execv
.