进程程序替换------>exec 函数家族
来源:互联网 发布:淘宝开放平台api 授权 编辑:程序博客网 时间:2024/06/05 07:48
调用exec并不创建新进程,只是用磁盘上的新程序替换了当前进程的正文段,数据段,堆段,栈段。
1.int execl(const char* pathname,const char* arg,....../* (char*)0 */);
int main(){pid_t id=fork(); if(id==0){execl("/bin/ls","ls","-a","-l",NULL);}else{waitpid(id,NULL,0);}return 0;}第一个参数是要替换的新的程序,是取绝对路径名,第二个参数是表示怎么执行,将命令行上的参数说明为一个单独的参数,并要以空指针结尾。
2.int execv(const char* pathname,char* const argv[]);
int main(){pid_t id=fork();if(id==0){char* argv[]={"ls","-a","-l",NULL};execv("/bin/ls",argv);}else{waitpid(id,NULL,0);}return 0;}先构造一个指向各个参数的指针数组,然后将该数组地址作为第二个参数。
3.int execle(const char* pathname,const char* arg,....../* (char*)0 */,
char* const envp[]);
int main(){pid_t id=fork();if(id==0){char* const envp[]={"MYPATH=/A/B",NULL};execle("/home/wwr/code/exec/myexec","./myexec",NULL,envp);}else{waitpid(id,NULL,0);}return 0;}
4.int execve(const char* pathname,char* const argv[], char* const envp[]);
这个是系统调用函数,其他6个函数都是在这个函数的基础上完成的。
5.int execlp(const char* filename,const char* arg,....../* (char*)0 */);
6.int execvp(const char* filename,char* const argv[]);
如果filename中包含/,则就将视为路径名,否则就按环境变量,在它所指定的目录中搜寻可执行文件。
7.int fexecve(int fd,char* const argv[], char* const envp[]);
第一个参数是文件描述符。
7个函数的返回值:成功,不返回,错误,返回-1.
总结:
阅读全文
0 0
- 进程程序替换------>exec 函数家族
- Linux----exec系列家族函数(进程程序替换)
- 进程程序替换---exec函数族
- 进程控制-进程程序替换(exec函数簇)
- 进程替换(exec函数)
- Linux exec家族函数
- linux exec函数家族
- linux exec函数家族
- exec函数家族总结
- linux exec函数家族
- linux:exec系列进程替换函数
- linux中进程执行exec家族
- Linux系统编程——进程替换:exec 函数族
- Linux系统编程——进程替换:exec 函数族
- Linux系统编程——进程替换:exec 函数族
- 【Linux系统编程】进程替换:exec 函数族
- Linux系统编程——进程替换:exec 函数族
- Linux系统编程——进程替换:exec 函数族
- 八大排序算法
- 【MyBatis学习07】动态sql
- hadoop上传文件错误org.apache.hadoop.ipc.RemoteException(java.io.IOException)
- 【笔记】Python算法教程(1)
- systen v消息队列(一)
- 进程程序替换------>exec 函数家族
- DCL、DDL、DML三种数据库语言的概述及区分方式
- 20.外边距
- 21.外边距
- String 类的模拟实现
- 22.定位
- Git指令的使用及Github项目的创建
- 23.定位
- 24.overflow