C를 활용해 bash의 일부분을 구현해보는 과제.
파트를 크게 5가지로 나누어 팀원인 jiwolee님과 각각 역할을 나누어 수행했습니다.
저는 tokenizer, built-in, signal, 특수문자 파트를 맡아 수행하였습니다.
tokenizer
환경변수처럼 해석이 필요한 문자를 해석하고 문자열을 의미있는 토큰으로 나누어 변환한 뒤 필요한 형태로 가공하여 parser로 전달한다.
이때 환경변수, 쌍따옴표, 홑따옴표, whitespace, 특수문자 등에 대한 처리를 잘 해주어야 이후 편하게 처리가 가능하다.
parser
토큰을 구조를 가진 구문트리(syntax tree)로 변환한다.
→ here-documantaion<<
executor
구문 트리에 맞게 명령을 실행한다.
→ redirection
→ pipe 생성 및 fork 자식프로세스 생성
→ cmd 실행 execve();built-in
→ echo
→ cd
→ pwd
→ export
→ unset
→ env
→ exit
- 각 상황에 맞는 적절한 에러메시지를 출력해야함.
- 상황마다 다른 반환값을 잘 처리해주어야 함.
signal
→ ctrl + c
→ ctrl + \
→ ctrl + d
- 시그널에도 반환값이 있는 경우가 있으니 잘 처리해주어야 함.
- termios를 활용하여 출력값을 잘 조절하면 편함.
- ctrl + d 는 signal()로 사용가능한 시그널이 아님.
특수문자
→ $?
→ $...
- $? = 이전의 반환값을 반환해주는 특수문자
- $... = 환경변수