검색어 입력폼
평가점수C

Shell 구현 (Operating System)

저작시기 2007.01 |등록일 2007.01.07 한글파일한글 (hwp) | 20페이지 | 가격 1,800원

소개글

유닉스 상에서 my_shell을 구현한 최고의 소스와 자료
운영체제(Opreating System) 배우면서 아주 유용한 자료입니다.
캡쳐 파일도 나와있는 하나뿐만 아니라 더 나와 있습니다.

목차

1. 구조에 대한 설명
2. 실행 화면 캡쳐
3. source code - my_shell.c

본문내용

1. 구조에 대한 설명
(1) parsing
먼저 문자열을 받아들여 buf 배열에 저장한 후 parse_command()라는 함수에서 있을지 모를 명령 앞, 뒤에 공백들을 없애고 두 번 이상 space를 눌러 생긴 공백이 있으면 한 개의 공백으로 만들어 준다. 그리고 redirection이나 pipe와 명령어, argument를 공백 하나로 구분할 수 있도록 붙어있으면 공백하나를 삽입한다. 대신 >> 의 경우 저 자체가 하나의 의미이므로 저 경우는 두 문자를 붙여 놓는다. 그리고 명령어 실행을 위한 execvp를 실행하기 위한 parameter로 명령어를 넘기기 위한 parse_command라는 포인터배열로 가르키기 편하도록 그 빈칸들을 널(\0)로 바꾸어 준다.
마지막으로 사용자가 입력한 명령어의 구조를 저장할 command_type배열에 명령어의 순서대로 type을 저장한다. (command, in_redirect, out_redirect, double_out_redirect, pipe) 그리고 그 수를 command_num에 저장한다.
parse_pipe에서는 pipe가 있는 명령의 경우 가장 먼저 실행될 명령은 parse_command에서 parse_command에 저장을 했으므로 다음에 호출될 시에 다음 실행될 명령을 parse_command에 저장한 뒤 return한다. 이는 먼저 실행되어 child process에게서 쓰일 명령과 나중에 실행될 parent process에게서 쓰일 명령을 구분하고 무한 파이프를 구현하기 위해 단계적으로 pipe를 풀어나가며 redirection 명령이 있을 경우 file name을 따로 저장해 놓는 함수이다.
(2) background 명령 실행
background 명령 실행을 위한 &가 붙어있을 경우 amper라는 변수를 1로 setting해주고 buf 배열에서 그 문자를 없앤다. 그리고 child process가 execvp로 실행 후 parent process로 보내오는 signal을 wait하지 않고 바로 prompt를 출력한다.
다운로드 맨위로