execv函数分析应用


函数格式:

int execv(const char *path, char *const argv[]);

int execvp(const char *file, char *const argv[]);

不带 l 的exec函数:execv,execvp表示命令所需的参数以char *arg[]形式给出且arg最后一个元素必须;

//========================================================================

注意:这两个函数之间的关系,如同 execl() 与 execlp() 函数之间的关系;

就是指定程序的路径,是需要指定绝对路径,还是到系统的环境变量目录下查找;

//========================================================================

例如:

char* arg[] = {"ls", "-a", "/home", NULL};        //定义参数列表

execv("/bin/ls", arg);    // OK,第一个参数是 path,是程序所在的绝对路径;

execv("ls", arg);    // ERR, 第一个参数是程序名,不是绝对路径;

execvp("ls", arg);    // OK, 第一个参数是程序名,函数会到系统的环境变量目录下,找到该程序来执行;

//========================================================================

测试例子如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <limits.h>

int main(void)
{
    pid_t childpid;
    char* const envp[] = {"name=wkf", "addr=sz", NULL};
    
    childpid = fork();

    if(-1 == childpid)
    {
        perror("fork err! \n");
        return 1;
    }
    else if(0 == childpid)
    {
        printf("in child process!\n");
        char * const envp[] = {"AA=11", "BB=22", NULL};
        //execl("/bin/ls", "ls", "-l", NULL);
        //execl("/bin/ls", "ls", NULL);
        //execl("/bin/", "ls", NULL);
        //execlp("ls", "ls", "-a", "/home/", NULL);

        //execle("./hello", "hello", NULL, envp);
        char* arg[] = {"ls", "-a", "/home", NULL};
        //execv("/bin/ls", arg);
        //execv("ls", arg);
        execvp("ls", arg);

        printf("child process end ...!");
        return 1;
    }    

    printf("in father process! \n");
    pid_t ret = wait(NULL);
    if(ret != childpid)
    {
        perror("father wait err!");
    }
    
    printf("hehe ...\n");
    return 1;
}


//========================================================================

只需要99元就可以投资自己,掌握Linux系统编程!主要传授《Linux C/C++程序设计》《Linux 系统编程》,主页有学习视频!
只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!
视频可以百度搜索:韦凯峰Linux编程学堂

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值