23,217
社区成员




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAXARGS 20
#define MAXARGLEN 100
static void execute(char *arglist[]);
static char* makestring(char *argbuf);
int main()
{
int numargs = 0;
char *arglist[MAXARGS + 1];
char argbuf[MAXARGLEN];
while(numargs < MAXARGS)
{
printf("Arg[%d] : ", numargs);
if(fgets(argbuf, MAXARGLEN, stdin) != NULL && argbuf[0] != '\n')
{
arglist[numargs++] = makestring(argbuf);
}
else
{
execute(arglist);
arglist[numargs] = NULL;
numargs = 0;
}
}
}
static void execute(char *arglist[])
{
if(execvp(arglist[0], arglist) == -1)
{
perror("execvp failed");
exit(1);
}
}
static char *makestring(char *argbuf)
{
char *cp;
if(argbuf == NULL)
return NULL;
argbuf[strlen(argbuf) - 1] = '\0';
cp = malloc(strlen(argbuf) + 1);
if(cp == NULL)
{
fprintf(stderr, "No enough memory");
exit(1);
}
strcpy(cp, argbuf);
return cp;
}