execve使用疑惑

exec()与system()的区别

https://blog.csdn.net/wu5795175/article/details/9064497



execv使用

https://blog.csdn.net/west_609/article/details/5941968


测试例子

test.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {

    printf("start arg0:%s arg1:%s\n", argv[0], argv[1]);
    printf("end\n");
    while(1);

    return 0;
}

test2.c

/* test.c */
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    char *argv[] = {".s/test vvv adctest","two2", NULL};
    char *envp[] = {NULL};
    int ret_stat = 0;
    int pid = fork();
    if (pid == 0) {
        printf("child: pid %d\n", getpid());
       //execve("./rt", argv, envp);
        execve("./test", argv, envp);
        //system("./rt");
        exit(127);
    }
    else if (pid > 0 ) {
        printf("parent: child pid is %d\n", pid);
        if (waitpid(pid, &ret_stat, 0) != pid) {
            printf("waitpid failed, ret_stat is %d\n", ret_stat);
        }
        else {
            printf("waitpid success, ret_stat is %d\n", ret_stat);
            printf("WIFEXITED(ret_stat): %d; WEXITSTATUS(ret_stat): %d;", WIFEXITED(ret_stat), WEXITSTATUS(ret_stat));
        }


    }
    else if (pid < 0) {
        printf("fork() error !\n");
        exit(-1);
    }


    return 0;
}

使用execv时,里面调用程序的arg0,arg1注意事项

运行结果如下

parent: child pid is 1271
child: pid 1271
start arg0:.s/test vvv adctest arg1:two2
end


ps
1006     23180  0.0  0.0   4172   348 pts/5    S+   17:41   0:00 ./test2
1006     23181  105  0.0   4172   348 pts/5    R+   17:41   0:04 .s/test vvv adctest two2


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值