유닉스에서 간단한 셸을 만들려고합니다. 나는 많은 것을 읽었으며 모두가 strtok
기능을 많이 사용한다는 것을 알게되었습니다. 그러나 나는 특별한 기능없이 그것을하고 싶다. 그래서 코드를 작성했지만 제대로 작동하지 않는 것 같습니다. 여기서 내가 뭘 잘못하고 있니? 표준 string.h을 포함에 표준 기능은, 그래서 그것을 사용하지 않는 좋은 이유가 없기 때문에간단한 유닉스 셸을 만드는 데 문제가 있습니다.
void process(char**);
int arg_count;
char **splitcommand(char* input)
{
char temp[81][81] ,*cmdptr[40];
int k,done=0,no=0,arg_count=0;
for(int i=0 ; input[i] != '\0' ; i++)
{
k=0;
while(1)
{
if(input[i] == ' ')
{
arg_count++;
break;
}
if(input[i] == '\0')
{
arg_count++;
done = 1;
break;
}
temp[arg_count][k++] = input[i++];
}
temp[arg_count][k++] = '\0';
if(done == 1)
{
break;
}
}
for(int i=0 ; i<arg_count ; i++)
{
cmdptr[i] = temp[i];
cout<<endl;
}
cout<<endl;
}
void process(char* cmd[])
{
int pid = fork();
if (pid < 0)
{
cout << "Fork Failed" << endl;
exit(-1);
}
else if (pid == 0)
{
cout<<endl<<"in pid";
execvp(cmd[0], cmd);
}
else
{
wait(NULL);
cout << "Job's Done" << endl;
}
}
int main()
{
cout<<"Welcome to shell !!!!!!!!!!!"<<endl;
char input[81];
cin.getline(input,81);
splitcommand(input);
}
큰 실수였습니다. 그러나 문제는 여전히 지속됩니다. 실은 내 주장이 임원에게 전달 되는가? 나는 cmd [0]과 cmd [1]을 출력 할 때를 의미한다. ls -l 명령을 내리면 cmd [0] = ls 및 cmd [1] = -l이 표시됩니다. 그리고 코드는 exec 함수 바로 전에 작동합니다. 그러나 임원은 일하지 않습니다. 무엇이 문제일까요? 미리 감사드립니다 – yuneek
고맙습니다. 프로그램이 작동했습니다 : 대단히 감사합니다 :) – yuneek