• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 对比C语言中execv相关的执行文件的三个函数

对比C语言中execv相关的执行文件的三个函数

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了execv函数,execv,系统调用execv 的用途,failed execv,c语言函数调用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

C语言execv()函数:执行文件函数
头文件:

 #include <unistd.h>
</div>

定义函数:

int execv (const char * path, char * const argv[]);
</div>

函数说明:execv()用来执行参数path 字符串所代表的文件路径, 与execl()不同的地方在于execve()只需两个参数, 第二个参数利用数组指针来传递给执行文件.

返回值:如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中.

错误代码:请参考 execve ().

范例

/* 执行/bin/ls -al /etc/passwd */
#include <unistd.h>
main()
{
  char * argv[] = {"ls", "-al", "/etc/passwd", (char*)};
  execv("/bin/ls", argv);
}
</div>

执行:

-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
</div>

C语言execve()函数:执行文件函数
头文件:

 #include <unistd.h>
</div>

定义函数:

int execve(const char * filename, char * const argv[], char * const envp[]);
</div>

函数说明:execve()用来执行参数filename 字符串所代表的文件路径, 第二个参数系利用数组指针来传递给执行文件, 最后一个参数则为传递给执行文件的新环境变量数组.

返回值:如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中.

错误代码:

EACCES:
1. 欲执行的文件不具有用户可执行的权限.
2. 欲执行的文件所属的文件系统是以noexec 方式挂上.
3. 欲执行的文件或script 翻译器非一般文件.

EPERM:
1. 进程处于被追送模式, 执行者并不具备root 权限, 欲执行的文件具有SUID 或SGID 位.
2. 欲执行的文件所属的文件系统是以nosuid 方式挂上, 欲执行的文件具有SUID 或SGID 位元, 但执行者并不具有root 权限.

E2BIG 参数数组过大

ENOEXEC 无法判断欲执行文件的执行文件格式, 有可能是格式错误或无法在此平台执行.

EFAULT 参数filename 所指的字符串地址超出可存取空间范围.

ENAMETOOLONG 参数filename 所指的字符串太长.

ENOENT 参数filename 字符串所指定的文件不存在.

ENOMEM 核心内存不足

ENOTDIR 参数filename 字符串所包含的目录路径并非有效目录

EACCES 参数filename 字符串所包含的目录路径无法存取, 权限不足.

ELOOP 过多的符号连接

ETXTBUSY 欲执行的文件已被其他进程打开而且正把数据写入该文件中

EIO I/O 存取错误

ENFILE 已达到系统所允许的打开文件总数.

EMFILE 已达到系统所允许单一进程所能打开的文件总数.

EINVAL 欲执行文件的ELF 执行格式不只一个PT_INTERP 节区

EISDIR ELF 翻译器为一目录

ELIBBAD ELF 翻译器有问题.

范例

#include <unistd.h>
main()
{
  char * argv[] = {"ls", "-al", "/etc/passwd", (char *)0};
  char * envp[] = {"PATH=/bin", 0};
  execve("/bin/ls", argv, envp);
}
</div>

执行:

-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
</div>

C语言execvp()函数:执行文件函数
头文件:

 #include <unistd.h>
</div>

定义函数:

int execvp(const char *file, char * const argv []);
</div>

函数说明:execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名, 找到后便执行该文件, 然后将第二个参数argv 传给该欲执行的文件。

返回值:如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中.

错误代码:请参考 execve ()。

范例

/*请与execlp ()范例对照 */
#include <unistd.h>
main()
{
  char * argv[] = {"ls", "-al", "/etc/passwd", 0};
  execvp("ls", argv);
}
</div>

执行:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 对比C语言中execv相关的执行文件的三个函数

相关文章

  • 2017-05-28C++编程中__if_exists与__if_not_exists语句的用法
  • 2017-05-28浅析C语言头文件和库的一些问题
  • 2017-05-28纯C语言:递归二进制转十进制源码分享
  • 2017-05-28解决在Mac下直接解压C++静态库出现的问题
  • 2017-05-28常用Hash算法(C语言的简单实现)
  • 2017-05-28typedef和#define的用法以及区别
  • 2017-05-28C++之异常处理详解
  • 2017-05-28C++内核对象封装单实例启动程序的类
  • 2017-05-28C++中指针和引用的区别分析
  • 2017-05-28C++ 头文件系列(set)详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C 语言指针变量详细介绍
    • C语言 文件操作解析详解及实例代码
    • C++实现DES加密算法实例解析
    • C++使用递归函数和栈操作逆序一个栈的算法示例
    • C语言中进制知识汇总
    • Cocos2d-x Schedule定时器的使用实例
    • C++ 关于MFC List Control 控件的总结
    • 浅析C++11新特性的Lambda表达式
    • 使用C语言实现vector动态数组的实例分享
    • C++ 中placement new 操作符使用方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有