函数exec

来源:互联网 发布:2站域名www.tt69.com 编辑:程序博客网 时间:2024/06/05 02:54
int main(int argc , char *argv[])//测试调用函数{    const char *env_init[] = {"USER=unkown","PATH=mypath",NULL};    pid_t pid;    if( (pid = fork()) < 0 )        err_sys("fork error");    else if(pid == 0)//这个很牛逼的样子哦,还可以这样玩,在子函数里面调用其他程序.并且次子进程所有东西都替换成了新程序,新程序从main开始执行        if(execle("/home/wangjun/DataStruct/apuebackup","apuebackup","argc 1",                  "argc 2" ,(char *)0 , env_init) < 0)            err_sys("execle error");//这个函数给子程序指定了环境是什么,可以指明路径    if(waitpid(pid , NULL , 0) != pid)        err_sys("wait error");    if( (pid = fork()) < 0 )        err_sys("fork error");    else if(pid == 0)//这种错误为什么会出现        if(execlp("apuebackup","apuebackup","argv1","argv2",                  (char *)0) < 0)//默认传递当前进程环境,但是可以传递参数进去,这就是可以理解为什么默认argv[i] = 0.为了别的程序调用,好区分传递参数或者传递环境变量.很牛逼啊            err_sys("execlp error");//注意此函数从PATH的路径里面去搜寻可执行程序,肯定搜寻不到,因为环境变量没有加路径嘛.   //execlp error: No such file or directory环境变量里面有,为什么err错误哦.    if(waitpid(pid , NULL , 0) != pid)        err_sys("wait error");//execlp执行程序,并且这个函数是默认envrion环境变量    exit(0);}
  • exec函数作用在于可以在子进程里面运行其他可执行程序。
    execlp需要正确执行,需要在环境变量里面加入路径。
  • 特别注意execlp第一个参数(新程序的argv[0]),可以设置为路径名文件名分量,也可以设置为任何字符串,因为某些shell会直接将这个变量自动设置成完全路径名。
  • 如执行./myfunction argv1 argv2 那么argc=3,对应argv[0]=”./myfunction”;argv[1]=”argv1”;argv[2]=”argv2”; 默认还有一个argv[3] = 0;为什么需要这个argv[3]存储一个空字符串指针呢?为了标识传参列表结束。看到execlp有一个参数(char*)0,所以argv[3]用来存储这个,让被调用函数可以知道参数列表的结尾。
原创粉丝点击