Linux/쉘, 쉘 명령어 구현하기
[쉘 구현하기] cd 명령어 오류 수정
Study with Me!
2023. 8. 12. 13:40
[쉘 구현하기] cd 명령어 구현
작업 디렉토리를 변경하는 cd 명령어를 추가했다. 인자를 전달하면 해당 인자로 작업 디렉토리를 이동하고, 인자를 전달하지 않으면 홈 디렉토리로 이동한다. chdir() 함수는 프로세스 생성 시 부
seongmoahn.tistory.com
cd 명령어 사용 시 프로세스를 생성하는 명령어들이 동작하지 않는 오류가 생겼다.
cd 명령어 사용 시 현재 작업 디렉토리가 소스코드가 있는 위치가 아닐 경우 my_*.c 파일을 호출하는 코드들이 동작하지 않는 오류가 생겼다.
아마 execv() 함수를 호출할 때 첫 번째 인자로 전달한 경로가 현재 작업 디렉토리이기 때문인 것 같다.
else if (pid == 0) {
execv(execName, argList);
exit(0);
}
helpExec(), lsExec() 함수 호출 시 실행 파일의 상대 경로가 아닌 절대 경로를 전달하도록 수정했더니 해결됐다.
// SM_shell.c
#include "my_header.h"
void helpExec() {
pid_t pid;
char path[PATH_MAX] = "";
strcat(path, codePath);
strcat(path, execName);
if ((pid = fork()) < 0) {
fprintf(stderr, "fork error\n");
exit(1);
}
else if (pid == 0) {
execl(path, "help", (char *)0);
exit(0);
}
else {
pid = wait(NULL);
}
}
void lsExec(char **argList) {
pid_t pid;
char path[PATH_MAX] = "";
strcat(path, codePath);
strcat(path, execName);
if ((pid = fork()) < 0) {
fprintf(stderr, "fork error\n");
exit(1);
}
else if (pid == 0) {
execv(path, argList);
exit(0);
}
else {
pid = wait(NULL);
}
}
...
위 코드는 아래 이미지를 클릭해 깃허브에서도 확인할 수 있다.