使用execvp()函数需要注意的两点
2011-11-02 17:13
295 查看
使用execvp()函数需要注意的两点
[日期:2011-10-05] | 来源:Linux社区 作者:joker0910 |
#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;
}
相关文章推荐
- 使用execvp()函数需要注意的两点
- mongo 对数据很严格 在使用组装条件的时候需要注意 字段的类型, 分享几个转换的函数
- Oracle分析函数model使用时需要注意的几个地方(一)
- Oracle分析函数model使用时需要注意的几个地方(二)
- 使用TransmitFile函数需要注意的几点
- php的crc32函数使用时需要注意的问题(不然就是坑)
- Javascript中使用parseInt函数需要注意的问题
- 使用OpenGL的glBindTexture()函数需要注意
- C++使用localtime函数需要注意的地方
- 精通Hibernate——Hibernate使用触发器需要注意的两点
- 【C】——使用creat()函数需要注意的事项
- PHP IN_ARRAY 函数 使用需要注意的地方
- php in_array 函数使用说明与in_array需要注意的地方说明
- C/C++库中使用time.h中函数需要注意
- PHP IN_ARRAY 函数 使用需要注意的地方
- Windows下使用创建多层文件夹 SHCreateDirectoryEx 函数需要注意的问题
- Oracle 使用concat函数需要注意的地方
- 5.1 Python 函数-默认参数,*args,**kwargs的使用;作用域-局部空间使用全局变量需要注意的事项等
- 实例解析使用指针作为函数参数传递需要注意的问题
- 调试使用了函数模块的程序时需要注意的一个小问题