exec系统调用会从当前进程中把当前程序的机器指令清除,然后在空的进程中载入调用时指定的程序代码,最后运行这个新的程序。
-
#include
-
#include
-
#include
-
#include
-
-
#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[])
-
{
-
-
-
-
-
-
-
-
-
-
-
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;
-
}
阅读(2212) | 评论(0) | 转发(0) |