您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: