对比C语言中execv相关的执行文件的三个函数
C语言execv()函数:执行文件函数
头文件:
#include <unistd.h>
定义函数:
int execv (const char * path, char * const argv[]);
函数说明: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); }
执行:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
C语言execve()函数:执行文件函数
头文件:
#include <unistd.h>
定义函数:
int execve(const char * filename, char * const argv[], char * const envp[]);
函数说明: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); }
执行:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
C语言execvp()函数:执行文件函数
头文件:
#include <unistd.h>
定义函数:
int execvp(const char *file, char * const argv []);
函数说明:execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名, 找到后便执行该文件, 然后将第二个参数argv 传给该欲执行的文件。
返回值:如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中.
错误代码:请参考 execve ()。
范例
/*请与execlp ()范例对照 */ #include <unistd.h> main() { char * argv[] = {"ls", "-al", "/etc/passwd", 0}; execvp("ls", argv); }
执行:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
上一篇:详解C语言中的rename()函数和remove()函数的使用方法
栏 目:C语言
下一篇:C语言中fchdir()函数和rewinddir()函数的使用详解
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/2795.html
您可能感兴趣的文章
- 04-02c语言函数调用后清空内存 c语言调用函数删除字符
- 04-02c语言的正则匹配函数 c语言正则表达式函数库
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言中对数函数的表达式 c语言中对数怎么表达
- 04-02c语言用函数写分段 用c语言表示分段函数
- 04-02c语言编写函数冒泡排序 c语言冒泡排序法函数
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段函数
- 04-02C语言中怎么打出三角函数 c语言中怎么打出三角函数的值
- 04-02c语言调用函数求fibo C语言调用函数求阶乘
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 04-02jquery与jsp,用jquery
- 01-11ajax实现页面的局部加载
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10delphi制作wav文件的方法
- 01-10SublimeText编译C开发环境设置
- 01-10C#中split用法实例总结
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 08-05DEDE织梦data目录下的sessions文件夹有什