1. Redirection을 구현
Redirection(in) 구현 부
Main() 함수에서 자식 프로세스 exec을 수행하기 전에 “<”가 있는지 확인후
있을 경우 dup2함수를 이용하여 redirection 기능을 수행하도록 구현 하였습니다.
그리고 마지막 for문을 이용하여 이전 커맨드벡터에서 떙겨주었습니다
( 리다이렉션 명령어가 들어있던 부분)
Redirection(out) 구현 부
마찬가지로 main()함수에서 자식프로세스가 exec을 하기 전에 redir_out함수로 들어가서
“>” 명령어가 있는지를 확인하고 있다면 dup2함수를 이용하여 redirection을 수행후
마지막 for문을 이용하여 커멘드벡터를 떙겨주었습니다.
( 리다이렉션 명령어가 들어있던 부분)
2. 파이프 처리 기능
받은 커맨드문장(cmdvector) 에서 파이프가 있는지 와 커맨드문장의 어느 위치에 파이프가
있는지를 확인합니다.
만약 파이프 명령어가 없다면 바로 리턴 합니다.(리턴 값 1)
그리고 for문을 통해서 파이프 명령어(“|”) 앞, 뒤 명령어들을 나눠줍니다.
그리고 파이프를 생성하여 줍니다.
그리고 첫 번째 받은 명령어를 리다이렉션을 이용하여 출력을 돌려줍니다.
그리고 함수 내에서 자식을 생성한 후 자식은 두번째 명령어를 실행하는데
dup함수와 리 다이렉션을 이용하여 입력을 첫 번째 명령어(cmdpipe1)로부터
입력을 받도록 리다이렉션을 합니다.그리고 결과의 출력이 표준출력이 아닌 파이프를
통해서 나가도록 파이프출력으로 내보내도록 dup함수를 통해 설정합니다.
그 후 exec을 실행합니다.
부모 프로세스는 3번째 명령어(cmdpipe3)를 수행합니다.
이 프로세는 입력을 파이프를 통해서 입력받도록 dup함수를 이용하여 설정해주고
그리고 출력을 redirection을 통하여 조절해줍니다.
'학부생 공부 > unix' 카테고리의 다른 글
쉘 구현(제어키 SIGINT, SIGQUIT 사용시 미종료) (2) | 2020.03.03 |
---|---|
파이프(pipes) -1 (0) | 2019.11.13 |
쉘 구현하기 . (백그라운드 실행) (0) | 2019.11.06 |