网站首页 > 基础教程 正文
经过前几章的了解我们对进程的创建和结束有了了解。
那么我们知道fork函数创建的进程只是将父进程的环境复制到新进程中,而没有用新程序来初始化创建的子进程,因此,它并不能执行一个新的目标程序,而这一点又是程序设计时所必须的,为此linux系统提供了exec系统调用。
exec函数有6种不同的使用格式,但是内核中只对应一个入口,不同之处在于不同格式有不同的名字和调用函数,这6种调用在头文件unistd.h中,格式如下:
int execl (const char *__path, const char *__arg, ...)
int execv (const char *__path, char *const __argv[])
int execle (const char *__path, const char *__arg, ...)
int execve (const char *__path, char *const __argv[], char *const __envp[])
int execlp (const char *__file, const char *__arg, ...)
int execvp (const char *__file, char *const __argv[])
上面的参数path指出一个可执行目标文件的路径名,参数file指出可执行目标文件的文件名,arg作为约定,同path一样指出目标文件的路径名,参数argv是一个字符指针数组,由它指出该目标程序使用的命令行参数表,按约定第一个字符指针指向与path或file相同的字符串,最后一个envp与argv一样也是一个字符指针数组,由它指出该目标程序执行是的进程环境,它也以一个空指针结束。
调用成功时exec不返回,从而不执行exec以后的所有语句,失败时返回-1;
exec的6种格式在以下3点上有所不同:
1、 path是一个目标文件的完整路径名,而file是目标文件名,它可以通过环境变量path来搜索;
2、 有path或file指定的目标文件的命令行参数是完整的参数列表还是通过指针数组argv来给出的;
3、 环境变量是系统自动传递还是通过envp传递的;
下表说明了exec函数的6种不同格式对以上3点的支持
接下来我们来看一个简单的例子,来简单的使用下exec函数:
然后我们再将上图中的12行的execl换成execlp,会打印出什么呢?
可以看到exec调用成功了,由此可见execl和execlp这两个函数可以替换使用,但需注意的是execlp中指定的目标文件名必须在path所定义的某个路径名之下。
猜你喜欢
- 2024-10-10 Linux系统常用命令大全 linux系统常用命令大全详解
- 2024-10-10 Redis数据类型与常用指令示例 redis数据类型和用法
- 2024-10-10 深入理解Redis原理与应用,总结10个必定掌握要点,5分钟彻底看懂
- 2024-10-10 sqlserver数据库中的高级知识点有哪些?
- 2024-10-10 程序员的福音 - Apache Commons Exec
- 2024-10-10 Linux常用命令分类详解|文件搜索 linux命令分类总结
- 2024-10-10 linux性能工具perf工作原理简析 linux perl
- 2024-10-10 Python-调用系统命令或脚本,快速完成任务
- 2024-10-10 「Docker」命令使用大全,全集一览
- 2024-10-10 DOS常用命令集合 dos所有命令的命令格式
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)