使用execvp()函数需要注意的两点
2011-09-28 00:42
531 查看
exec系统调用会从当前进程中把当前程序的机器指令清除,然后在空的进程中载入调用时指定的程序代码,最后运行这个新的程序。
更详细的介绍:
http://www.mkssoftware.com/docs/man3/execl.3.asp
#include<stdio.h> #include<signal.h> #include<string.h> #include<unistd.h> #define MAXARGS (20) #define ARGLEN (100) int main() { char *arglist[MAXARGS + 1]; int numargs; char argbuf[ARGLEN]; char *makestring(); numargs = 0; while(numargs < MAXARGS) { printf("Arg[%d]?", numargs); if(fgets(argbuf, ARGLEN, stdin) && *argbuf != '\n') arglist[numargs ++] = makestring(argbuf); else { if(numargs > 0) { arglist[numargs] = NULL; execute(arglist); numargs = 0; } } } return 0; } int execute(char* arglist[]) { /* *#include<unistd.h> *int execlp(const char* file, const char* argv ...) * eg. execlp("ps","ps","-au","-x",(char*)0); * 1.最后一个参数必须是(char*)0, 如果不强制转换成char*,就会自动转换成int* 有未知的错误。 * 2.第一个参数是要运行的文件,会在环境变量PATH中查找file. * 3.失败会返回-1, 成功无返回值,但是,会在当前进程运行,执行成功后,直接结束当前进程。可以在子进程中运行。 * 4.第二个参数,是一个参数列表,如同在shell中调用程序一样,参数列表为0,1,2,3……因此,ps作为第0个参数,需要重复一遍 * int execvp(const char* file, const char* argv[]); argv列表最后一个必须是 NULL */ execvp(arglist[0], arglist); perror("execvp failed"); exit(1); } char* makestring(char *buf) { char *cp, *malloc(); buf[strlen(buf) - 1] = '\0'; cp = malloc(strlen(buf) + 1); if(cp == NULL) { fprintf(stderr, "no memory\n"); exit(1); } strcpy(cp, buf); return cp; }
更详细的介绍:
http://www.mkssoftware.com/docs/man3/execl.3.asp
相关文章推荐
- 使用execvp()函数需要注意的两点
- 关于Javascript定义函数和this使用的两点注意的地方
- php的crc32函数使用时需要注意的问题(不然就是坑)
- 调试使用了函数模块的程序时需要注意的一个小问题
- 调试使用了函数模块的程序时需要注意的一个小问题
- 实例解析使用指针作为函数参数传递需要注意的问题
- C++使用localtime函数需要注意的地方
- mongo 对数据很严格 在使用组装条件的时候需要注意 字段的类型, 分享几个转换的函数
- Oracle分析函数model使用时需要注意的几个地方(一)
- Oracle分析函数model使用时需要注意的几个地方(二)
- 使用函数模板需要注意的几个地方
- C++使用localtime函数需要注意的地方
- C++使用localtime函数需要注意的地方http://blog.csdn.net/shellching/article/details/8114266
- C语言(5) 函数使用需要注意的地方
- php in_array 函数使用说明与in_array需要注意的地方说明
- php in_array 函数使用说明与in_array需要注意的地方说明
- 使用TransmitFile函数需要注意的几点
- C#的Replace函数,使用函数作为的参数需要注意
- php的crc32函数使用时需要注意的问题(不然就是坑)
- PHP IN_ARRAY 函数使用需要注意的地方