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);
}
왜 현재 버퍼를 처리하지 않습니까? –
자세히 설명해 주시겠습니까? – user3238533
"empty args"란 무엇을 의미합니까? 왜 1시에 2시에 시작하고 0시에 시작하지 않겠습니까? 이것은'getln'이하는 일과 관련된 문제 일 수 있습니다. 완전한 코드를 게시하십시오. 그대로, 당신의 질문은 말이되지 않습니다. – Gilles