Search

5번 과제

General

함수 수준에서 modular를 잘 하도록
interface를 정의하고 구현을 하도록, file level에서 modular를 잘 이루도록
abstract object와 abstract data type을 정의
data structures를 함수와 함께 encapsulate 하도록
stateless module을 적절히 사용
DynArray를 쓰도록, 코드는 갖다 배껴쓰고
.ishrc라는 이름의 파일을 맨 처음에 런치했을 때 읽도록 구성. 그 파일에서 들어오는 command를 해석하지 못하면 성적이 안 좋아질것
.ishrc라는 파일은 home 디렉토리 상에서 검색하도록. working directory가 아니라
.ishrc파일이 존재하지 않거나 읽어드릴 수 없을 때 에러가 나면 안 되고 적절히 알아서 해야함.
.ishrc파일에서 읽어들여온 거는 프린트를 해야함.
"% "를 출력하고 커맨드를 stdout으로 출력.
stdin으로 들어오는 명령들은 출력하지 말 것

Error Handling

programmer error를 assert함수로 잘 잡아내야함
assert 함수로 각 함수의 파라미터를 항상 체크하도록. 특히 non-static 함수들
user에러는 if문으로 잡아내도록. 그리고 에러 메시지를 적절히 잘 쓰자. user에러는 user input에 의해 발생하는 것들이다.
dynamic memory allocation이 잘 됬는지를 항상 체크하도록
standard error stream으로 메시지를 출력하도록
"prgramName :" 으로 에러를 시작하도록. programName 은 프로그램의 argv[0]이다.
꼭 ish일 필요는 없다
함수를 부르는데 실패하면 perror나 strerror를 통해 적절한 에러 메시지를 출력하도록 하자

Lexical Analysis

fgets 함수를 통해 각 함수를 불러오도록
lexical analyzer를 dfa를 통해 구현하도록
white-space character를 구분하기 위해 isspace함수를 사용하도록
token 리스트를 출력해주는 임시 코드를 만들도록. 이게 잘 되기 전까지는 그 다음꺼 하지 마라
아래 example 라인이 적절히 출력되는거를 확인해봐라
Search
Lexical Test
Title
INPUT LINE
TOKEN ARRAY
check
123
123
okay
one123
one123
okay
123one
123one
okay
@#$%^&*()
@#$%^&*()
okay
'
'
okay
one two
one two
okay
one two
one two
okay
one two
one two
okay
one |
one |
okay
one|
one |
okay
|one
| one
okay
"one"
one
okay
"|"
| (an ordinary token)
okay
"one two"
one two
okay
one"two"
onetwo
okay
"one"two
onetwo
okay
"one
ERROR - unmatched quote
okay
one"two
ERROR - unmatched quote
okay
lexical analyzer를 통해서 special character가 있는지 없는지 꼭 확인해라.
cat file1 | grep str cat file1 "|" grep str
Plain Text
복사

Syntactic Analysis

command가 적합한지(validation)을 진행해라
여기서 많이 할 수록 execution phase에서는 할게 적어질 것이다.
syntatic analyzer로 만들어진 커맨드를 프린트해보는 임시 코드를 만들어봐라.
이게 안되면 그 다음꺼는 할 생각 마라
syntactic analyzer를 테스트해봐라. 아래 예들을 가지고
Search
Title
INPUT LINE
VALID/INVALID
통과
cat
Valid
okay
cat file1
Valid
okay
cat file1 | grep main
Valid
okay
cat file1 | cat
Valid
okay
cat file2 | grep test | wc -l
Valid
okay
cat file1 |
Invalid: Missing command name
okay
| file1
Invalid: Missing command name
okay
cat file1 | | wc -l
Invalid: Missing command name
okay

Execution

fork를 호출하기 전에 항상 fflush를 해라. I/O 버퍼를 비우기 위함
setenv built-in 명령을 구현하기 위해 setenv 함수를 불러야한다.
unsetenv built-in 명령을 구현하기 위해 unsetenv함수를 호출해야한다.
cd built-in 명령을 구현하기 위해 chdir함수를 호출해야한다.
exit built-in 명령을 구현하기 위해 exit(0)함수를 호출해야한다.
또는 프로그램의 메인 함수에서 return 0을 함으로써 구현해도 된다.

Signal Handling

signal 함수를 불러야한다. signal handler를 설치하기 위해
alarm함수를 불러야한다. SIGQUIT 시그널을 핸들링 하기 위해
SIG_IGN과 SIG_DFL을 써야한다.
sigprocmask를 호출해야한다. main 함수 근처에서 써야하는데. SIGINT, SIGQUIT, SIGALARM들이 블록되지 않은 것을 확인하기 위해 써야함.

Redirection (Extra Credit)

'<' 나 '>' 는 lexical 분석에서 special character로 취급해야한다.
파이프 토큰의 왼쪽에 redirection of standard out 이 있으면 에러가 되야하고
파이프 토큰의 오른쪽에 redirection of standard in 이 있으면 에러가 되야한다.
아래 커맨드들의 syntactic analysis도 같이 해봐라
Search
Title
cat < file1
Valid
Valid Test
진짜 되는지 test
cat > file1
Valid
okay
okay
cat < file1 > file2
Valid
okay
okay
cat > file1 < file2
Valid
okay
okay
cat file1 > file2
Valid
okay
okay
cat > file2 file1
Valid
okay
okay
cat file1 | grep main > result
Valid
okay
okay
cat < file1 | grep main > result
Valid
okay
okay
cat < file1 | grep main > result
Valid
okay
okay
< file1
Invalid: Missing command name
okay
cat file1 <
Invalid: Standard input redirection without file name
okay
cat file1 < | grep str
Invalid: Standard input redirection without file name
okay
cat file1 >
Invalid: Standard output redirection without file name
okay
cat file1 > | grep str
Invalid: Standard output redirection without file name
okay
cat file1 > file2 > file3
Invalid: Multiple redirection of standard output
okay
cat < file1 < file2
Invalid: Multiple redirection of standard input
okay
cat file1 | cat < file2
Invalid: Multiple redirection of standard input
okay
cat file1 > out | grep str
Invalid: Multiple redirection of standard output
okay
파일에 stdout과 stdin이 가능해야함
stderror 스트림으로 에러 표시가 가능해야함
없는 이름의 파일이면 만들어서 넣어야함
있는 이름의 파일이면 덮어써야함
17-2MemoryMgmt.ppt
18588.0KB
18IOMgmt.ppt
18232.5KB
19ProcessMgmt1.ppt
18226.0KB
19ProcessMgmt2.ppt
18622.0KB
20Signals (1).ppt
478.0KB
precept11.zip
285.0KB
precept12.zip
435.0KB