저는 몇 시간 동안이 간단한 리눅스 쉘에 어려움을 겪었습니다. 그리고 어떤 이유로 지금 당장은 제대로 작동하지 못합니다. 이 셸이 어떻게 작동하지 않는지에 대한 예가 mkdir 명령이기 때문에 무언가가 내 입력이나 무언가를 어떻게 처리하는지 심각하게 어지럽 힙니다. 무작위로 내가 만들려고 시도한 적이없는 임의의 디렉토리를 만들지 않을 것이며, 디렉토리를 만들 때마다 임의의 이름을 가진 다른 디렉토리를 생성하는 것을 관리 할 때마다 분명히 만들지 않았습니다. 무언가가 엉망이고 난 단지 단서가 없습니다. 왜냐하면 저는 마지막 인자 배열을 출력했기 때문에 거기에서 괜찮아 보입니다. 누군가 나를 위해 이것 좀 봐 주시겠습니까.간단한 리눅스 쉘 구현 문제
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<string.h>
#include<unistd.h>
#include<sys/wait.h>
int main(int argc, char *argv[]){
while(1){
char line[100], *temp, *split[15];
int child_id;
printf("$ ");
fgets(line, sizeof(line), stdin);
line[strlen(line)-1] = '\0';
temp = strtok(line, " ");
int i = 0;
while(temp != NULL){
split[i] = temp;
temp = strtok(NULL, " ");
i++;
}
char *args[i];
int j;
for(j = 0; j < i; j++){
args[j] = split[j];
printf("%s\n", args[j]);
}
child_id = fork();
if(child_id == 0){
execvp(args[0], args);
exit(0);
}else{
wait(&child_id);
}
}
}
왜 'args' 배열을 사용하면 좋을까요? 직접 'split'을 사용하십시오 ... – nneonneo
char 배열을 사용하여 원래 배열이 문제를 일으키고 있는지 확실하지 않았기 때문에 사용하지 않았으므로 결코 할당하지 않았을 것입니다. 이슈. 나는 지나치게 조심스러워했다. – jasimp