Linux c/c++编程--由argv 而想到的

先上一个自己的测试程序,本来是想试一下execve函数生成子进程。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

extern char **environ;
int main(int argc, char **argv){

        pid_t pid = 0;
        int ret = 0;
        int index =0;
        printf("argc is %d \n",argc);
        while(NULL != argv[index]){
             printf("argv[%d] is %s\n",index,argv[index]);
             index++;
        }
#if 0 
        for(index = 0; index < argc; index++){
                printf("argv[%d] is %s\n",index,argv[index]);
        }

        printf("argv[%d] is %s\n",index,argv[index]);
#endif

        if((pid = fork()) < 0){
                printf("fork error:");
        }else if(pid == 0){
                index = 0;
                while(NULL != environ[index]){
                        printf("envv[%d] is %s\n",index,environ[index]);
                        index++;
                }
                ret = execve("new",argv,environ);
                printf("child process %d.\n",ret);
        }else{
                printf("parent process .\n");
        }

        return 0;
}

1,argv 和 environ 这两个字符串数组,注意最后必须有NULL作为结束符。 The argv and envp arrays must each include a null pointer at the end of the array.因为有如此特性,所以可以打印argv,而不需要判断argc.

        int index =0;
        printf("argc is %d \n",argc);
        while(NULL != argv[index]){
             printf("argv[%d] is %s\n",index,argv[index]);
             index++;
        }

2,execve 会替换子进程的代码段,所以如果execve执行成功了,后面的printf("child process") 是 永远也不会执行的。

 

转载于:https://my.oschina.net/PMNaYxT/blog/1931842

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值