티스토리 뷰
이것은 이번 우리 학교 운영체제 수업의 과제였습니다,,,,?
전 이미 제출했기때문에 공개해도 별 상관 없다고 판단 ㅡㅡ!
간단한 쉘 만들기었는데, 특정 기호를 입력시 백그라운드로 실행되게 하는 간단한 프로그램인데....
핵심적인건 fork로 생성되는 자식과 부모의 관계를 알면 쉬어집니다.
백그라운드로 안돌릴때는, 부모가 자식이 끝나는걸 기다려야 합니다.
백그라운드로 돌릴때는 부모가 자식이 끝나는거 안기다립니다~ 그래서 부모한테 다시 일시켜도 부모는
자식이 멈추던 말던 일을 해줍니다.
문자열 검색해서 명령어로 던질때 길이 -1해서 하면 뭐... 의외로 간단한 프로그램이었습니다.
exec 계열 함수 대신에 system() 이라는 시스템 콜을 사용하면 더 간단해지는...
지저분한 코드지만 SynaxHighlighter 설치 기념으로 한번 테스트가 필요했기때문에!! 올려봅니다!!
전 이미 제출했기때문에 공개해도 별 상관 없다고 판단 ㅡㅡ!
간단한 쉘 만들기었는데, 특정 기호를 입력시 백그라운드로 실행되게 하는 간단한 프로그램인데....
핵심적인건 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));
}
}
}}
댓글