马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
# 代码demo11.c#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h> // 包含 wait 函数头文件
int main(int argc,char *argv[]) {
int pid = fork();
if (pid == 0){
char *const ar[] = {"china","test"};
printf("%s\n",argv[0]);
char *run = "/home/ubuntu/c/demo12";
int ret = execv(run,ar);
if (ret == -1){
perror("execv");
}
printf("ret=%d\r\n",ret);
return 0;
}
int child_pid;
child_pid = wait(NULL);
if (child_pid > 0){
printf("exit pid = %d\r\n",pid);
}
return 0;
}
# 代码demo12.c#include <stdio.h>
int main(int argc,char *argv[]) {
printf("argv[0]=%s,argv[1]=%s,argv[2]=%s\r\n",argv[0],argv[1],argv[2]);
}
# 运行环境 ubuntu18.4
运行:
/home/ubuntu/c/demo11 /home/ubuntu/c/demo12
返回结果
ubuntu@VM-8-11-ubuntu:~/c$ ./demo11
./demo11
execv: Bad address
ret=-1
exit pid = 30007
# 尝试
编译后 给demo11和demo12都加了 chomd+x权限都还是不行,
单独运行demo12是没问题的.
`execv`函数的第一个参数是要执行的可执行文件的路径,函数将会运行这个可执行文件并替换当前进程的代码和数据段。因此,需要传递 `main` 函数中的上下文环境参数,以便新程序可以正确地获得入口点并知道如何处理命令行参数等信息。如果不传递这些参数,新程序可能无法正确地运行或处理命令行参数。
求最佳答案
|