exec... 系列函数
2011-05-07 16:09
288 查看
exec... 系列函数
L 系列:
int execl ( char *path, char *arg0, char *arg1, ... , NULL);
int execlp ( char *path, char *arg0, char *arg1, ..., NULL);
int execle ( char *path, char *arg0, char *arg1, ..., NULL, char **envp
);
int execlpe ( char *path, char *arg0, char *arg1, ..., NULL, char **envp
);
V 系列:
int execv ( char *path, char *arg[] );
int execvp ( char *path, char *arg[] );
int execve ( char *path, char *arg[]
, char **envp
);
int execvpe ( char *path, char *arg[]
, char **envp
);
说明: 原型在 process.h
exec...系列函数可以加载并运行称为子进程的其它文件。调用成功时,子进程将覆盖父进程。
必须有足够的内存。
*
path 是被调用子进程文件名。
exec...函数通过标准的 DOS 搜索算法来查找
path:
1. 如果木有扩展名或者句点:先查找该名;如果没有找到,就加上.com,.exe扩展名再找
2. 如果给定扩展名, 直接查找给定 的文件
3. 如果给出句点, 则查找没有扩展名的文件
4. 如果path没有包含确定的目录, 含有 p 后缀的
exec...函数 首先在当前目录下查找,
如果找不到,就 再查找DOS环境变量PATH所指定的目录
#include<process.h>
#include<stdio.h>
#include<errno.h>
void main(int argc, char * argv[])
{
int i;
printf("Command line arguments:/n");
for(i = 0; i < argc; i++)
printf("[%2d] : %s/n", i, argv[i])
;
printf(" About to exec child with arg1 arg2 ... /n");
execvp("h://output//ten2bin.exe"
, argv);
perror("execv error");
exit(1);
}
#include<process.h>
#include<stdio.h>
#include<errno.h>
void main(int argc, char * argv[])
{
int i;
printf("Command line arguments:/n");
for(i = 0; i < argc; i++)
printf("[%2d] : %s/n", i, argv[i]
);
printf(" About to exec child with arg1 arg2 ... /n");
execvp("ten2bin.exe"
, argv);
perror("execv error");
exit(1);
}
加在 exec...系列函数后的后缀 L, V, P, E 表示命名函数的某种操作能力;
L:
表明指针参数 arg0, arg1, ... 作为独立参数进行传递。通常, L 后缀用于事先知道待传递参数个数的情况
V:
表明扎针参数 arg0], arg[1], ..., arg
作为指针数组进行传递。通常, V 后缀用于待传递参数个数可变的情况
P:
表明如果没有指定目录,则首先在当前目录下查找文件,没有找到时再到环境变量PATH 指定的路径查找
E:
表明参数envp可以传到子进程,用以改变子进程的环境。在没有e后缀的情况下,子进程将继承父进程的环境
exec...
系列函数必须至少传递一个 参数(arg0 或 arg[0])给子进程,该参数约定为 path 的一个拷贝。类似于 main(int argc,
char * argv[])中的 argv[0], argn / arg
后的 NULL 表示参数表结束。
执行成功时,返回值为子进程的退出状态(0为正常终结)。如果子进程 调用 了非0参数的exit函数,退出状态则为非0值。
出现错误时,exec...函数返回值 -1, 并将全局变量errno设置为下列之一。
E2BIG 参数表太长
EACCES 无此权限
EMFILE 打开的文件太多
ENOENT 路径或者文件名没有找到
ENOEXEC 运行格式错误
ENOMEM 无足够内存
可移植性: 仅适用于DOS
L 系列:
int execl ( char *path, char *arg0, char *arg1, ... , NULL);
int execlp ( char *path, char *arg0, char *arg1, ..., NULL);
int execle ( char *path, char *arg0, char *arg1, ..., NULL, char **envp
);
int execlpe ( char *path, char *arg0, char *arg1, ..., NULL, char **envp
);
V 系列:
int execv ( char *path, char *arg[] );
int execvp ( char *path, char *arg[] );
int execve ( char *path, char *arg[]
, char **envp
);
int execvpe ( char *path, char *arg[]
, char **envp
);
说明: 原型在 process.h
exec...系列函数可以加载并运行称为子进程的其它文件。调用成功时,子进程将覆盖父进程。
必须有足够的内存。
*
path 是被调用子进程文件名。
exec...函数通过标准的 DOS 搜索算法来查找
path:
1. 如果木有扩展名或者句点:先查找该名;如果没有找到,就加上.com,.exe扩展名再找
2. 如果给定扩展名, 直接查找给定 的文件
3. 如果给出句点, 则查找没有扩展名的文件
4. 如果path没有包含确定的目录, 含有 p 后缀的
exec...函数 首先在当前目录下查找,
如果找不到,就 再查找DOS环境变量PATH所指定的目录
#include<process.h>
#include<stdio.h>
#include<errno.h>
void main(int argc, char * argv[])
{
int i;
printf("Command line arguments:/n");
for(i = 0; i < argc; i++)
printf("[%2d] : %s/n", i, argv[i])
;
printf(" About to exec child with arg1 arg2 ... /n");
execvp("h://output//ten2bin.exe"
, argv);
perror("execv error");
exit(1);
}
#include<process.h>
#include<stdio.h>
#include<errno.h>
void main(int argc, char * argv[])
{
int i;
printf("Command line arguments:/n");
for(i = 0; i < argc; i++)
printf("[%2d] : %s/n", i, argv[i]
);
printf(" About to exec child with arg1 arg2 ... /n");
execvp("ten2bin.exe"
, argv);
perror("execv error");
exit(1);
}
加在 exec...系列函数后的后缀 L, V, P, E 表示命名函数的某种操作能力;
L:
表明指针参数 arg0, arg1, ... 作为独立参数进行传递。通常, L 后缀用于事先知道待传递参数个数的情况
V:
表明扎针参数 arg0], arg[1], ..., arg
作为指针数组进行传递。通常, V 后缀用于待传递参数个数可变的情况
P:
表明如果没有指定目录,则首先在当前目录下查找文件,没有找到时再到环境变量PATH 指定的路径查找
E:
表明参数envp可以传到子进程,用以改变子进程的环境。在没有e后缀的情况下,子进程将继承父进程的环境
exec...
系列函数必须至少传递一个 参数(arg0 或 arg[0])给子进程,该参数约定为 path 的一个拷贝。类似于 main(int argc,
char * argv[])中的 argv[0], argn / arg
后的 NULL 表示参数表结束。
执行成功时,返回值为子进程的退出状态(0为正常终结)。如果子进程 调用 了非0参数的exit函数,退出状态则为非0值。
出现错误时,exec...函数返回值 -1, 并将全局变量errno设置为下列之一。
E2BIG 参数表太长
EACCES 无此权限
EMFILE 打开的文件太多
ENOENT 路径或者文件名没有找到
ENOEXEC 运行格式错误
ENOMEM 无足够内存
可移植性: 仅适用于DOS
相关文章推荐
- linux系统编程:exec系列函数(execl,execlp,execle,execv,execvp)使用
- linux系统编程之进程(三):exec系列函数和system函数
- linux系统编程之进程(三):exec系列函数和system函数
- exec系列函数
- exec系列函数
- linux进程编程-替换进程映-exec系列函数(execl,execlp,execle,execv,execvp)使用
- 第八章(二) exec系列函数 和 进程的几个ID的认识
- 多进程函数系列fork(), wait(), exec()系列,system(), posix_spawn()实例详解
- exec系列函数
- linux进程编程,exec系列函数(execl,execlp,execle,execv,execvp)使用
- exec系列函数
- 《UNIX环境高级编程》笔记--exec系列函数
- C程序调用shell脚本共有三种方式:system()、popen()、exec系列函数
- linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用
- 关于exec系列函数的文件路径问题及延伸
- exec系列函数
- Linux中exec系列函数的应用
- linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用
- system与exec系列函数对比
- 【经典转载】Linux进程学习系列之六 进程控制函数之exec()函数的学习