티스토리 뷰

이것은 이번 우리 학교 운영체제 수업의 과제였습니다,,,,?

전 이미 제출했기때문에 공개해도 별 상관 없다고 판단 ㅡㅡ!

간단한 쉘 만들기었는데, 특정 기호를 입력시 백그라운드로 실행되게 하는 간단한 프로그램인데....

핵심적인건 fork로 생성되는 자식과 부모의 관계를 알면 쉬어집니다.

백그라운드로 안돌릴때는, 부모가 자식이 끝나는걸 기다려야 합니다.

백그라운드로 돌릴때는 부모가 자식이 끝나는거 안기다립니다~ 그래서 부모한테 다시 일시켜도 부모는

자식이 멈추던 말던 일을 해줍니다.

문자열 검색해서 명령어로 던질때 길이 -1해서 하면 뭐... 의외로 간단한 프로그램이었습니다.

exec 계열 함수 대신에 system() 이라는 시스템 콜을 사용하면 더 간단해지는...

지저분한 코드지만 SynaxHighlighter 설치 기념으로 한번 테스트가 필요했기때문에!! 올려봅니다!!


#include <stdio.h>
#include <sys/wait.h>

char buf[50];
char buf2[50];

int status;

int main() {

  int pid;
  int i;

  while(1) {

    printf("YCG>> ");
    gets(buf);

    char* ptr = NULL;

    ptr = strstr(buf, "*");

    pid = fork();
    if(ptr != NULL) {

      if(pid == 0) {
 execlp(strncpy(buf2, buf, strlen(buf)-1), buf2, NULL);

      }
    }
    else {


      if(pid == 0) {
 execlp(buf, buf,NULL);
      }
      else {
 while(wait(&status) != pid && wait(&status) != -1)
         return (wait(&status));
      }
    }
  }

}

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크