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函数相关推荐

  1. Linux C编程--进程介绍1--进程的创建

    这篇文章介绍的内容包括 1.Linux进程--进程标识号 2.进程控制--进程创建 1.Linux进程--进程标识号 进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动.多个程序并 ...

  2. Linux C编程--进程介绍3--进程终止和等待

    进程结束 1.在Linux中任何让一个进程结束 进程退出表示进程即将结束.在Linux中进程退出分为了正常退出和异常退出两种. 1>正常退出 a. 在main()函数中执行return . b. ...

  3. Linux系统编程——进程替换:exec 函数族

    在 Windows 平台下.我们能够通过双击运行可运行程序.让这个可运行程序成为一个进程:而在 Linux 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是,假设我们本来就执行着一 ...

  4. Linux C编程--进程介绍5--system函数

    表头文件 #i nclude<stdlib.h> 定义函数 int system(const char * string); 这个函数是用fork,exec,waitpid这三个系统函数实 ...

  5. Linux C编程--进程介绍6--进程的各种标识

    本文将介绍进程的: 1.进程的用户标识号 2.进程标识号 进程的用户ID     Linux/Unix进程涉及到三类用户ID:       1.实际用户ID(real user id,RUID):为该 ...

  6. Linux C编程--进程介绍7--综合应用实例

    第一个实例重点说明fork和exec系统函数 该实例是一个交互式命令处理程序,它能完成Linux系统标准Shell的小部分功能,具体功能如下所述: 1.提交命令的参数最多为8个 2.可前,后台执行 3 ...

  7. Linux C编程--进程介绍4--errno

    当linux中的C api函数发生异常时,一般会将errno变量(需includeerrno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原 ...

  8. Linux系统编程——进程基础知识

    Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...

  9. Linux 系统编程 -进程概念篇

    Linux系统编程-进程篇 冯诺依曼体系结构 冯诺依曼的两个重要思想 当代计算机的三级缓存 操作系统 操作系统的概念 操作系统的组成 操作系统作用 Linux下的操作系统体系 进程 进程概念 进程特性 ...

最新文章

  1. Spring中Bean的配置方式之通过全类名(反射)
  2. JAVA——Tess4J简单的图像识别DEMO
  3. 如何清理和维护计算机,电脑的优化与维护操作教程
  4. jupyter安装与迁移文件
  5. windwos下ffmpeg的安装
  6. Web前端笔记(7)
  7. Python sys.path、sys.modules模块介绍
  8. python如何输出结果到txt_python 执行结果输出为txt
  9. 我们怎么样把pdf格式转换成dwg格式呢
  10. TM1620 LED 驱动控制 程序
  11. ajax 读服务器文件,使用AJAX读取本地文件
  12. 哥德巴赫猜想 php,C++_c++验证哥德巴赫猜想,哥德巴赫猜想是世界近代三大 - phpStudy...
  13. 前端性能优化-优化大量图片加载超大图片加载(附懒加载实现方案)
  14. exdoll机器人_打造国内领先的定制化人工智能机器人品牌, EXDOLL新品惊艳亮相...
  15. 利用计算机管理档案,初探档案的计算机管理
  16. 【八股文】Linux篇
  17. R 文字挖掘基本流程
  18. CSS_变换(transform)
  19. phpmailer 通过smtp发送邮件,相同发送内容有的成功有的失败
  20. Spring深入研究之常用的设计模式(源码分析)

热门文章

  1. Sublime如何设置背景透明
  2. web项目部署到linux服务器出现的问题
  3. PLMN概念和应用设置
  4. Delphi下使用指针的简单总结
  5. 光伏产业链遭致命伤:补贴下调或结束暴利
  6. 掘金小册Jenkins大纲准备
  7. 使用Innobackupex快速搭建(修复)MySQL主从架构
  8. Confluence 6 其他需要备份和恢复的地方
  9. Bmob图片上传遇到的坑
  10. 树莓派 之 Screen