// 여세를 몰아 shell 프로그램을 만들어 봅시다.
// 는... 왜 이렇게 코드가 기냐...
// 갑자기... 적응 안되게...
// 하지만 그렇게 어려운 코드는 아닙니다.
// define한 maxargs 만큼 main에서 input을 받고, 그것을 makestring에서 엔터를 없애고, 널을 집어 넣은 다음 배열에 집어 넣습니다.
// 그렇게 만들어진 배열을 execute에서 execvp를 이용해 실행하면 끝.
// 코드 자체는 어렵지 않은데 처음엔 makestring이 왜 있나 싶었네요...
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxargs 20
#define arglen 100
int execute(char* arglist[]);
char* makestring(char* buf);
int main(int argc, char* argv[])
{
char* arglist[maxargs+1];
int numargs = 0;
char argbuf[arglen];
while(numargs<maxargs)
{
printf("arg[%d] ? \n",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;
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;
}
'IT' 카테고리의 다른 글
waitdemo1.c (0) | 2014.11.11 |
---|---|
forkdemo1.c (0) | 2014.11.11 |
before & after.c (0) | 2014.11.11 |
exec1.c (0) | 2014.11.11 |
set_ticker.c (0) | 2014.11.05 |