exec族函数

exec族函数,第1张

概述fork()函数生成的子进程只能运行与父进程相同的代码函数,如果想要子进程执行另外一个程序,需要用到exec族的函数,如下: execlp()函数 int execlp(const char *file,const char *arg,…); /***execlp.c***/#include<stdio.h>#include<stdlib.h>#include<unistd.h

fork()函数生成的子进程只能运行与父进程相同的代码函数,如果想要子进程执行另外一个程序,需要用到exec族的函数,如下:

execlp()函数

int execlp(const char *file,const char *arg,…);
/***execlp.c***/#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(){    pID_t pID;    pID = fork();    if(-1 == pID)    {        perror("fork error:");        exit(1);    }    else if(0 < pID)    {        sleep(2);        printf("parent\n");    }    else    {        execlp("ls","ls","-l","-a",NulL);    }    return 0;}

运行结果:

[email protected]:~/wangqinghe/linux/20190806$ ./execlp

总用量 28

drwxrwxr-x 2 ubuntu1604 ubuntu1604 4096 8月   6 13:19 .

drwxrwxr-x 3 ubuntu1604 ubuntu1604 4096 8月   6 13:06 ..

-rwxrwxr-x 1 ubuntu1604 ubuntu1604 8856 8月   6 13:19 execlp

-rw-rw-r-- 1 ubuntu1604 ubuntu1604  274 8月   6 13:19 execlp.c

-rw-rw-r-- 1 ubuntu1604 ubuntu1604   37 8月   6 13:10 test.c

parent

 

execl()函数

execl()函数第一个参数跟的是程序路径地址

int execl(const char *path,const char*arg,…);
/***execl.c***/#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(){    pID_t pID;    pID = fork();    if(-1 == pID)    {        perror("fork error:");        exit(1);    }    else if(0 < pID)    {        sleep(2);        printf("parent\n");    }    else    {        execlp("/bin/ls",NulL);    }    return 0;}

运行结果:

[email protected]:~/wangqinghe/linux/20190806$ gcc execl.c -o execl

[email protected]:~/wangqinghe/linux/20190806$ ./execl

总用量 44

drwxrwxr-x 2 ubuntu1604 ubuntu1604 4096 8月   6 13:23 .

drwxrwxr-x 3 ubuntu1604 ubuntu1604 4096 8月   6 13:06 ..

-rwxrwxr-x 1 ubuntu1604 ubuntu1604 8856 8月   6 13:23 execl

-rw-rw-r-- 1 ubuntu1604 ubuntu1604  280 8月   6 13:23 execl.c

-rwxrwxr-x 1 ubuntu1604 ubuntu1604 8856 8月   6 13:19 execlp

-rw-rw-r-- 1 ubuntu1604 ubuntu1604  275 8月   6 13:21 execlp.c

-rw-rw-r-- 1 ubuntu1604 ubuntu1604   37 8月   6 13:10 test.c

parent

该函数可以执行自定义函数:

/*** *test.c**/#include<stdio.h>#include<unistd.h>int main(){    printf("This is a test\n");    sleep(1);    return 0;    }/***execl.c***/#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(){    pID_t pID;    pID = fork();    if(-1 == pID)    {        perror("fork error:");        exit(1);    }    else if(0 < pID)    {        sleep(2);        printf("parent\n");    }    else    {        execlp("./test","test",NulL);    }    return 0;}

运行结果:

@L_419_3@:~/wangqinghe/linux/20190806$ ./execl

This is a test

parent

 

execv()函数

int execv(const char * file,char *const argv[]);
/***execv.c***/#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(){    pID_t pID;    pID = fork();    if(-1 == pID)    {        perror("fork error:");        exit(1);    }    else if(0 < pID)    {        sleep(2);        printf("parent\n");    }    else    {        char *argv[] = {"ls","-a","-h",NulL};        execv("/bin/ls",argv);    }    return 0;}

运行结果:

[email protected]:~/wangqinghe/linux/20190806$ gcc execv.c -o execv

[email protected]:~/wangqinghe/linux/20190806$ ./execv

总用量 76K

drwxrwxr-x 2 ubuntu1604 ubuntu1604 4.0K 8月   6 13:43 .

drwxrwxr-x 3 ubuntu1604 ubuntu1604 4.0K 8月   6 13:06 ..

-rwxrwxr-x 1 ubuntu1604 ubuntu1604 8.7K 8月   6 13:34 execl

-rw-rw-r-- 1 ubuntu1604 ubuntu1604  271 8月   6 13:34 execl.c

-rwxrwxr-x 1 ubuntu1604 ubuntu1604 8.7K 8月   6 13:19 execlp

-rw-rw-r-- 1 ubuntu1604 ubuntu1604  275 8月   6 13:21 execlp.c

-rwxrwxr-x 1 ubuntu1604 ubuntu1604 8.8K 8月   6 13:43 execv

-rw-rw-r-- 1 ubuntu1604 ubuntu1604  343 8月   6 13:42 execv.c

-rwxrwxr-x 1 ubuntu1604 ubuntu1604 8.5K 8月   6 13:32 test

-rw-rw-r-- 1 ubuntu1604 ubuntu1604  106 8月   6 13:34 test.c

-rw-rw-r-- 1 ubuntu1604 ubuntu1604   55 8月   6 13:28 while.c

parent

总结

以上是内存溢出为你收集整理的exec族函数全部内容,希望文章能够帮你解决exec族函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1019989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存