Linux execve函数簇用法

exec函数簇实现的功能都是用一个新程序替换原来的程序,替换的内容包括堆栈段,代码段,进程控制器PCD,但是原进程的PID保持不变
int execl(const char *path, const char *arg, ...);
...表示参数是可变参数列表,例如execl("hello","参数1","参数2","参数3",NULL)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int arg,char *args[])
{
    execl("/bin/ls","/bin/ls","-la",NULL);
    /*备注:这里参数写"ls",execl()无法找到ls程序*/
    printf("fly with me
");
    return 0;
}
int execlp(const char *file, const char *arg, ...);
p表示无需填写路径,只要填写文件名称,因为execlp()函数会在当前环境变量PATH下查找该文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int arg,char *args[])
{
    execlp("ls","ls","-la",NULL);
    printf("fly with me
");
    return 0;
}
int execle(const char *path, const char *arg,..., char * const envp[]);
参数envp是一个以NULL结尾的字符串数组,代表程序员自定义的环境变量,标准写法是KEY=VALUE
如果envp参数传值NULL,在被替换进程打印的是NULL
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>

int main(int arg,char *args[])
{
    printf("old getpid()=%d
",getpid());
    char *envps[]={"aa=11","bb=22",NULL};
    execle("./hello","./hello",NULL,envps);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>

extern char **environ;

int main(int arg,char *args[])
{
    printf("fly with me;getpid()=%d
",getpid());
    int i=0;
    for(i=0;environ[i]!=NULL;i++)
    {
        printf("%s
",environ[i]);
    }
    return 0;
}
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
原文地址:https://www.cnblogs.com/zhanggaofeng/p/6067580.html