Linux操作系统——启动进程:exec族

exec在Linux中指的是一组函数,一共是六个,分别是

  1. int execl(const char *path,const char *arg,…)
  2. int execlp(const char *path,const char *arg,…)
  3. int execle(const char *path,const char *arg,…,char const *envp[])
  4. int excev(const char *path,char *const argv[])
  5. int execvp(const char *path,char *const argv[])
  6. int execve(const char *path,char *const argv[],char *const argv[])
    其中只有execve才是真正意义上的系统调用,其他都是在此基础上包装的库函数
    下面对这几个函数进行说明

execl函数

execl函数用于执行文件

表头文件 #include
定义函数 int execl(const char *path,const char *arg…
函数说明 execl()用来执行参数path字符串所带便的文件路径,接下来的参数代表执行该文件时传递过去的argv[0],argv[1]…,最后一个参数必须用空指针NULL作结束
返回值 如果执行成功不会反悔,失败返回-1失败原因存于error中

execlp函数

execlp用于从PATH环境变量中查找文件并执行

表头文件 #include
定义函数 int execlp(const char *path,const char *arg,…)
函数说明 execlp()会从PATH环境变量所指的目录中查找符合 参数file的文件名,找到后执行改文件,然后将第二个以后的参数当做改文件的argv[0], argv[1]…,最后一个参数必须用空指针NULL作结束
返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于error中

execve函数

表头文件 #include
定义函数 3. int execle(const char *path,const char *arg,…,char const *envp[])
函数说明 execve()用来执行参数pathname字符串所代表的文件路径,第二个参数系列利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组
返回值 如果执行成功则函数不会返回,执行失败返回-1,失败原因存于error中

execvp函数

execvp函数用于执行文件

表头文件 #include
定义函数 int execvp(const char *path,char *const argv[])
函数说明 execvp()会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行改文件,然后将第二个参数argv传给欲执行的文件
返回值 如果执行成功则函数不返回,失败则返回-1,错误存于error中

启动进程:system

system函数用于执行shell命令

表头文件 #include<stdlib.h>
定义函数 int system(const char*string)
函数说明 system会调用fork产生的子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,由命令执行完后随即返回原调用的进程,在调用system()期间SIGCLD信号会被暂时搁置,SIGINT和SIGQUIT信号被忽略
返回值 如果system在调用/bin/sh时失败则返回127,其他原因失败返回-1,若参数string为空指针,则返回非零值。如果system调用成功则最后会返回执行shell命令的返回值,

你可能感兴趣的:(学习)