다음은 C를 사용하여 cd 시스템 호출을 구현하는 코드입니다.이 코드의 문제점은 if
조건 if(strcmp(buffer,"cd") == 0)
을 입력하지 않아서 그 이유를 이해할 수 없다는 것입니다.조건부 일 경우 C-를 사용하여 cd 시스템 호출 구현
#include<sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include<dirent.h>
#include<error.h>
#define BUFFERSIZE 20
int main(){
char *args[80];
char buffer[BUFFERSIZE];
char *prompt = "OS";
char *a = ">";
printf("%s%s",prompt,a);
fgets(buffer, BUFFERSIZE, stdin);
char *tok;
tok = strtok (buffer," ");
while(buffer != NULL){
buffer[strlen(buffer)-1] = '\0';
pid_t pid;
pid = fork();
if(pid < 0){
fprintf(stderr, "Fork failed");
return 1;
}
else if(pid == 0){
if(strcmp(buffer,"cd") == 0){
tok = strtok(NULL,"\n");
cd(tok);
}
printf("%s%s",prompt,a);
fgets(buffer, BUFFERSIZE, stdin);
}
else{
wait(NULL);
}
}
return 0;
}
int cd(char *pth){
char path[1000];
strcpy(path,pth);
static char *prompt = "OS";
static char *a = ">";
char *token;
char cwd[256];
getcwd(cwd,sizeof(cwd));
strcat(cwd,"/");
strcat(cwd,path);
chdir(cwd);
printf("%s-%s%s",prompt,path,a);
return 0;
}
Q : 선택한 디버거에서 "temp"의 값을 보았습니까? 실제로 "cd"와 같은가요? 다음은 "gdb"에 대한 좋은 자습서입니다 : http://www.cs.cmu.edu/~gilpin/tutorial/ – paulsm4
1)'buffer [strlen (buffer) -1] = '\ 0';'IMHO . strlen() *은 0을 반환 할 수 있습니다. 2)'tok = strtok (temp, "");'tok'은 다른 토큰을 가리킨다. – wildplasser
'cd' *는 독립 실행 형 프로그램이 될 수 없다. 쉘 내장이어야한다. 너 정확히 뭘 하려구? –