`
灵动的水
  • 浏览: 194558 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

exec函数族包括6个函数:

阅读更多
exec函数族包括6个函数:

#include <unistd.h>
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。


例子:
#include
int main(int argc, char *argv[])
{
char *envp[]={"PATH=/tmp", "USER=lei", "STATUS=testing", NULL};
char *argv_execv[]={"echo", "excuted by execv", NULL};
char *argv_execvp[]={"echo", "executed by execvp", NULL};
char *argv_execve[]={"env", NULL};
if(fork()==0) {
if(execl("/bin/echo", "echo", "executed by execl", NULL)<0)
perror("Err on execl");
}
if(fork()==0) {
if(execlp("echo", "echo", "executed by execlp", NULL)<0)
perror("Err on execlp");
}
if(fork()==0) {
if(execle("/usr/bin/env", "env", NULL, envp)<0)
perror("Err on execle");
}
if(fork()==0) {
if(execv("/bin/echo", argv_execv)<0)
perror("Err on execv");
}
if(fork()==0) {
if(execvp("echo", argv_execvp)<0)
perror("Err on execvp");
}
if(fork()==0) {
if(execve("/usr/bin/env", argv_execve, envp)<0)
perror("Err on execve");
}
}

程序里调用了2 个Linux 常用的系统命令,echo和env。echo会把后面跟的命令行参数原封不动的打印出来,env用来列出所有环境变量。
由于各个子进程执行的顺序无法控制,所以有可能出现一个比较混乱的输出--各子进程打印的结果交杂在一起,而不是严格按照程序中列出的次序。
最常见的错误:
平时的编程中,如果用到了exec 函数族,一定记得要加错误判断语句。因为与其他系统调用比起来,exec很容易受伤,被执行文件的位置,权限等很多因素都能导致该调用的失败。
最常见的错误是:
1)找不到文件或路径,此时errno 被设置为ENOENT;
2)数组argv和envp忘记用NULL结束,此时errno被设置为EFAULT;
3)没有对要执行文件的运行权限,此时errno被设置为EACCES。
分享到:
评论

相关推荐

    Linux中使用exec函数族详解及示例代码 | 嵌入式Linux应用开发篇 – 03

    exec函数族中包括6个函数: #include int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg,..., char * ...

    进程替换:exec 函数族示例代码

    `exec`函数族包括多个成员,如`execl`, `execlp`, `execle`, `execv`, `execvp`, 和 `execve`等,它们在C语言编程中被广泛使用,为程序员提供了启动新进程的灵活性。 `exec`函数族的基本工作原理是,当一个进程调用...

    PHP中exec函数和shell_exec函数的区别

    exec函数和shell_exec函数都可以用来执行Linux命令,但它们获取命令执行结果的方式不同。exec函数只能获取命令的最后一行输出,而shell_exec函数可以获取命令的所有输出。具体来说,当需要执行的命令返回多行结果时...

    linux进程之exec函数族.zip

    在本压缩包中,包含的`execl.c`和`helloexec.c`是两个示例程序,它们演示了如何使用`exec`函数族。`execl`和`helloexec`则可能是编译后的可执行文件。 `exec`函数族主要包括以下成员: 1. `execl()`:该函数以字串...

    C例子:exec系列函数

    该程序是我写的博客“一起talk C栗子吧(第一百三十六回:C语言实例--exec系列函数二)”的配套程序,共享给大家使用

    PHP中如何判断exec函数执行成功?

    `exec`函数有三个参数: 1. `command`:要执行的命令字符串。 2. `$output`:(可选)用于存储命令输出的数组。 3. `$return_var`:(可选)用于存储命令执行后的退出状态码。 退出状态码是一个整数值,通常在0到...

    JavaScript中exec函数用法实例分析.docx

    JavaScript 中 exec 函数是正则表达式的一部分,用于在字符串中执行查找,并返回包含该查找结果的一个数组。本文将详细介绍 exec 函数的用法、定义和使用方法。 一、exec 函数的定义 exec 函数是 JavaScript 中的...

    exec函数族的使用

    fork创建一个新的进程就产生了一个新的PID,exec启动一个新程序,替换原有的进程,因此这个新的被exec执行的进程的PID不会改变,和调用exec函数的进程一样。  下面来看下exec函数族:  #include  int execl...

    基于exec函数族分析Linux初始化进程运行环境的过程

    ### 基于exec函数族分析Linux初始化进程运行环境的过程 #### 一、Linux内存管理简介 Linux操作系统采用了一种高效的虚拟内存管理机制,其中主要包括分页管理技术。这一技术的核心在于将物理内存划分为固定大小的块...

    解决Windows下PHP的exec、shell_exec等函数不能正常运行的方法

    首先,我们要理解`exec`和`shell_exec`这些函数的工作原理。它们都是PHP提供的用于在服务器上执行外部程序或命令行脚本的函数。在Windows系统中,这些函数通常依赖于`cmd.exe`(命令提示符)来运行外部程序。当PHP...

    安全模式下exec等函数安全隐患电脑资料.pdf

    在 PHP 手册中,有一节关于安全模式下的限制函数,包括 backtick operator、shell_exec、exec、system、passthru 和 popen 等函数。这些函数在安全模式下被禁用或限制。 * backtick operator:在安全模式下被禁用。...

    linux进程和线程编程(exec)

    exec函数族共有六种调用形式,都是以exec开头,后面的字母表示了用法上的区别。 exec函数族的六种调用形式 1. `execl(const char *path, const char *arg, ...)`:该函数的第一个参数是要执行的程序的路径,后面是...

    SQL 函数集合

    ODBC API 函数是开放式数据库连接(Open Database Connectivity)应用程序编程接口中的函数,用于对数据库进行连接和操作,常见的函数包括: 1. SQLConnect 函数:连接到数据库。 2. SQLExecute 函数:执行 SQL ...

    Python内置函数案例演示.pdf

    6. bytes()函数:返回一个新的bytes对象,该对象是不可变的序列。 7. callable()函数:用于检查一个对象是否是可调用的,即检查该对象是否支持调用协议。 8. chr()函数:返回一个字符,该字符的Unicode编码为指定...

    JavaScript中exec函数用法实例分析

    本文实例讲述了JavaScript中exec函数用法。分享给大家供大家参考。具体如下: javaScript 中的 exec 函数,用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。 rgExp.exec&#40;str&#41; 参数: ...

    php实现exec函数调用ping.zip

    本示例中的"php实现exec函数调用ping"着重展示了如何利用PHP的`exec`函数来执行操作系统内置的`ping`命令,以测试网络连接或检查特定主机的可达性。`ping`命令是网络诊断中最常用的工具之一,它发送Internet控制消息...

    Python常用的基础函数

    exec函数可以执行一段代码。 42. time.sleep()函数:停止一段时间 time.sleep()函数可以停止一段时间。 43. webbrowser.open_new_tab()函数:新建标签并使用浏览器打开指定的网页 webbrowser.open_new_tab()函数...

    SQL表值函数

    六、SQL表值函数的注意事项 使用SQL表值函数需要注意以下几点: * 需要遵守函数命名惯例 * 需要正确地定义函数参数 * 需要正确地定义函数返回类型 * 需要确保函数体的正确性 七、SQL表值函数的优化技巧 使用SQL...

    Linux进程与线程实验,exec族函数、管道、消息队列、信号机制、共享内存等

    这展示了exec函数如何在不返回的情况下执行新程序的能力。 **2. fork函数** `fork`函数用于创建子进程。当调用`fork`成功时,它会在调用进程(父进程)中返回子进程ID,在子进程中返回0。实验中,我们观察到父进程...

    EDA/PLD中的exec函数族的使用

    `EDA/PLD`(电子设计自动化/可编程逻辑器件)虽然通常涉及硬件设计和编程,但`exec`函数族的概念和使用是通用的,适用于任何操作系统环境,包括那些用于开发和测试EDA/PLD工具的环境。 `exec`函数族的主要功能是...

Global site tag (gtag.js) - Google Analytics