• 파일시티 이벤트
  • 캠퍼스북
  • LF몰 이벤트
  • 서울좀비 이벤트
  • 탑툰 이벤트
  • 닥터피엘 이벤트
  • 아이템베이 이벤트
  • 아이템매니아 이벤트

마이쉘(myshell) 리눅스에서 구현 소스코드

*경*
개인인증판매자스토어
최초 등록일
2010.11.12
최종 저작일
2010.11
파일확장자 C언어
가격 3,000원 할인쿠폰받기
다운로드
장바구니

소개글

컴퓨터공학과에서 당골 과제로 나오는 마이쉘(myshell)을 리눅스에서 구현 하였습니다. 소스코드에 상세한 주석처리를 해놓았기 때문에 이해도 쉽게 되실겁니다.

파이프 라인과 모든 명령어가 실행이 가능합니다.





int main()
{
pid_t fork_result;
int in_pipes[2];
int out_pipes[2];

//set_path();
pipe(in_pipes);
pipe(out_pipes);

while(1){

type = read_arg();

if (type == COMMAND) {
fork_result = fork();
if (fork_result == -1) {
fprintf(stderr, "fork error\n");
exit(EXIT_FAILURE);
}
//child
if (fork_result == 0) {
execvp(args_p[0], args_p);
printf("Command not found!!\n");
exit(EXIT_FAILURE);
}
//parent
else
wait(0);
} else if (type == PIPE) {
fork_result = fork();
if (fork_result == -1) {
fprintf(stderr, "fork error\n");
exit(EXIT_FAILURE);
}
//child
if (fork_result == 0) {
if (first_pipe_arg) {
close(1);
dup(out_pipes[1]);
close(out_pipes[1]);
execvp(args_p[0], args_p);
exit(EXIT_FAILURE);
}
else if(!last_pipe_arg) {
close(0);
dup(in_pipes[0]);
close(in_pipes[0]);
close(in_pipes[1]);

close(1);
dup(out_pipes[1]);
close(out_pipes[1]);
execvp(args_p[0], args_p);
exit(EXIT_FAILURE);
}
else {
close(0);
dup(in_pipes[0]);
close(in_pipes[0]);
close(in_pipes[1]);
execvp(args_p[0], args_p);
exit(EXIT_FAILURE);
}
//parent
} else {
char buf[BUFSIZ];
int n;

if (!first_pipe_arg) {
close(in_pipes[0]);
close(in_pipes[1]);
}
wait(0);
if (!first_pipe_arg)
pipe(in_pipes);
close(out_pipes[1]);
if (!last_pipe_arg)
while ((n = read(out_pipes[0], buf, BUFSIZ)) > 0) {
write(in_pipes[1], buf, n);
}
close(out_pipes[0]);
pipe(out_pipes);

}
} else if (type == EXIT)
break;

}

return 0;
}

컴파일 실행환경

리눅스, 유닉스, 우분투

참고 자료

없음

자료후기(1)

*경*
판매자 유형Bronze개인인증

주의사항

저작권 자료의 정보 및 내용의 진실성에 대하여 해피캠퍼스는 보증하지 않으며, 해당 정보 및 게시물 저작권과 기타 법적 책임은 자료 등록자에게 있습니다.
자료 및 게시물 내용의 불법적 이용, 무단 전재∙배포는 금지되어 있습니다.
저작권침해, 명예훼손 등 분쟁 요소 발견 시 고객센터의 저작권침해 신고센터를 이용해 주시기 바랍니다.
환불정책

해피캠퍼스는 구매자와 판매자 모두가 만족하는 서비스가 되도록 노력하고 있으며, 아래의 4가지 자료환불 조건을 꼭 확인해주시기 바랍니다.

파일오류 중복자료 저작권 없음 설명과 실제 내용 불일치
파일의 다운로드가 제대로 되지 않거나 파일형식에 맞는 프로그램으로 정상 작동하지 않는 경우 다른 자료와 70% 이상 내용이 일치하는 경우 (중복임을 확인할 수 있는 근거 필요함) 인터넷의 다른 사이트, 연구기관, 학교, 서적 등의 자료를 도용한 경우 자료의 설명과 실제 자료의 내용이 일치하지 않는 경우
최근 본 자료더보기
  • 프레시홍 - 전복
탑툰 이벤트
  마이쉘(myshell) 리눅스에서 구현 소스코드
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업