2014-01-26 4 views
0

C에서 기본 Unix 쉘을 구현하려고합니다. 내 프로그램은 char ** args에 사용자 명령을 저장합니다. 다음은 내 문제입니다 :C에서 문자 포인터 배열을 지우는 방법은 무엇입니까?

사용자에게 명령을 요청하면 e.x ls, ls가 args [0]에 저장됩니다. 그런 다음 하위 프로세스를 포크하고 execvp를 사용하여 명령을 실행합니다. 이제 사용자가 다음 명령을 입력하면 ls가 다시 args [1]에 저장됩니다. 그래서 나는 execvp를 사용하여이 명령을 실행할 수 없다.

다른 arguements에 대해 ls 또는 을 찾는 배열을 반복하고 싶지 않습니다. 프로그램이 임의의 인수를 실행하기 때문입니다.

args를 다시 쓸 수 있도록 args를 비우는 방법이 필요합니다 [1]. 당신이 Getln을 이해하면

int main() { 
    pid_t childPro; 
    pid_t parentPro; 
    int i,r,argCount,status,pipeCount,changeOut; 
    char **args; 

    while(1) { 
     argCount=0; 
     printf("davedShell$ "); 
     args = getln(); 

if(argCount>=1) { 
    //Creating a child process through fork 
    childPro =fork(); 

    if(childPro==0){ 
     printf("Child Process: %d successfully created\n",(int) getpid()); 
     execvp(args[0],args); 
    } 
    else if (childPro == -1) { 
     printf("Fork Failed- Exiting"); 
    exit(1); 
    } 
    parentPro = wait(&status); 
    } 
+0

왜 현재 버퍼를 처리하지 않습니까? –

+0

자세히 설명해 주시겠습니까? – user3238533

+0

"empty args"란 무엇을 의미합니까? 왜 1시에 2시에 시작하고 0시에 시작하지 않겠습니까? 이것은'getln'이하는 일과 관련된 문제 일 수 있습니다. 완전한 코드를 게시하십시오. 그대로, 당신의 질문은 말이되지 않습니다. – Gilles

답변

0

() 당신은 당신의 자신의 질문에, 왜 안 Getln (& 인수)를 대답 할 수? args에 할당 된 메모리는 어디입니까? 함수 내의 args에 대한 메모리 할당과 메모리 포인터 반환은 다른 방법으로 처리해야합니다. 대상 아키텍처에 따라 스택이나 레지스터에 대한 포인터를 얻을 수 있습니다.

관련 문제