Linux C编程--进程介绍2--exec函数
exec函数族
fork()函数是用于创建一个子进程,该子进程几乎拷贝了父进程的全部内容,但是,这个新创建的进程如何执行呢?这个exec函数族就提供了一个在进程中启动另一个程序执行的方法。
exec函数族包括6个函数:
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, const char *envp[]);
int execv(const char *path, const char *argv[]);
int execve(const char *path, const char *argv[], const char *envp[];
int execvp(const char *file, const char *argv[]);
参数说明:
execl的第一个参数是包括路径的可执行文件,后面是列表参数,列表的第一个为命令path,接 着为参数列表,最后必须以NULL结束。
execlp的第一个参数可以使用相对路径或者绝对路径。
execle,最后包括指向一个自定义环境变量列表的指针,此列表必须以NULL结束。
execv,v表示path后面接收的是一个向量,即指向一个参数列表的指针,注意这个列表的最后 一项必须为NULL。
execve,path后面接收一个参数列表向量,并可以指定一个环境变量列表向量。
execvp,第一个参数可以使用相对路径或者绝对路径,v表示后面接收一个参数列表向量。
exec被调用时会替换调用它的进程的代码段和数据段(但是文件描述符不变),直接返回到调用它的进程的父进程,如果出错,返回-1并设置errno。
下面给出两个例子
1.这是一个非常简单的程序,只是为了说明exec的使用
#include <stdio.h>
#include <unistd.h>int main()
{printf("===system call execl testing ===\n");execlp("date","date",0);printf("exec error !\n");return 0;
}
当execl调用成功时,printf函数并不执行。
2.这个例子是exec函数和fork函数的联合使用,这是一个实用工具,功能是对某一指定文件进行监视,当所监视的文件修改后,自动为它建立一个副本。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>int main(int argc, char *argv[])
{int fd;int stat,pid;struct stat stbuf;time_t old_time=0;if(argc!=3){fprintf(stderr,"Usage: %s watchfile copyfile \n", argv[0]);return 1;}if((fd=open(argv[1],O_RDONLY))==-1){fprintf(stderr,"Watchfile: %s can't open \n", argv[1]);return 2;}fstat(fd, &stbuf);old_time=stbuf.st_mtime;for(;;){fstat(fd, &stbuf);if(old_time!=stbuf.st_mtime){while((pid=fork())==-1);if(pid==0){execl("/bin/cp","/bin/cp",argv[1],argv[2],0);return 3;}wait(&stat);old_time=stbuf.st_mtime;}elsesleep(30);}
}
wait(&stat);
old_time=stbuf.st_mtime;
这两句的功能是:
父进程调用另一个系统函数wait等待子进程终止
进程被while((pid=fork())==-1);这条语句中断
Linux C编程--进程介绍2--exec函数相关推荐
- Linux C编程--进程介绍1--进程的创建
这篇文章介绍的内容包括 1.Linux进程--进程标识号 2.进程控制--进程创建 1.Linux进程--进程标识号 进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动.多个程序并 ...
- Linux C编程--进程介绍3--进程终止和等待
进程结束 1.在Linux中任何让一个进程结束 进程退出表示进程即将结束.在Linux中进程退出分为了正常退出和异常退出两种. 1>正常退出 a. 在main()函数中执行return . b. ...
- Linux系统编程——进程替换:exec 函数族
在 Windows 平台下.我们能够通过双击运行可运行程序.让这个可运行程序成为一个进程:而在 Linux 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是,假设我们本来就执行着一 ...
- Linux C编程--进程介绍5--system函数
表头文件 #i nclude<stdlib.h> 定义函数 int system(const char * string); 这个函数是用fork,exec,waitpid这三个系统函数实 ...
- Linux C编程--进程介绍6--进程的各种标识
本文将介绍进程的: 1.进程的用户标识号 2.进程标识号 进程的用户ID Linux/Unix进程涉及到三类用户ID: 1.实际用户ID(real user id,RUID):为该 ...
- Linux C编程--进程介绍7--综合应用实例
第一个实例重点说明fork和exec系统函数 该实例是一个交互式命令处理程序,它能完成Linux系统标准Shell的小部分功能,具体功能如下所述: 1.提交命令的参数最多为8个 2.可前,后台执行 3 ...
- Linux C编程--进程介绍4--errno
当linux中的C api函数发生异常时,一般会将errno变量(需includeerrno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原 ...
- Linux系统编程——进程基础知识
Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...
- Linux 系统编程 -进程概念篇
Linux系统编程-进程篇 冯诺依曼体系结构 冯诺依曼的两个重要思想 当代计算机的三级缓存 操作系统 操作系统的概念 操作系统的组成 操作系统作用 Linux下的操作系统体系 进程 进程概念 进程特性 ...
最新文章
- Spring中Bean的配置方式之通过全类名(反射)
- JAVA——Tess4J简单的图像识别DEMO
- 如何清理和维护计算机,电脑的优化与维护操作教程
- jupyter安装与迁移文件
- windwos下ffmpeg的安装
- Web前端笔记(7)
- Python sys.path、sys.modules模块介绍
- python如何输出结果到txt_python 执行结果输出为txt
- 我们怎么样把pdf格式转换成dwg格式呢
- TM1620 LED 驱动控制 程序
- ajax 读服务器文件,使用AJAX读取本地文件
- 哥德巴赫猜想 php,C++_c++验证哥德巴赫猜想,哥德巴赫猜想是世界近代三大 - phpStudy...
- 前端性能优化-优化大量图片加载超大图片加载(附懒加载实现方案)
- exdoll机器人_打造国内领先的定制化人工智能机器人品牌, EXDOLL新品惊艳亮相...
- 利用计算机管理档案,初探档案的计算机管理
- 【八股文】Linux篇
- R 文字挖掘基本流程
- CSS_变换(transform)
- phpmailer 通过smtp发送邮件,相同发送内容有的成功有的失败
- Spring深入研究之常用的设计模式(源码分析)