|
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#define MAXARG 7
main()
{
char buf[256];
char *arg[MAXARG];
char *s;
char *save;
int argv;
/* 공백, 탭, 개행으로 이루어진 구분자 선언 */
static const char delim[] = " \t\n";
int pid, status;
/* 무한 반복 */
while(1) {
/* 프롬프트 출력 */
printf("myshell: ");
gets(buf);
argv = 0;
/* 문자열에서 delim을 기준으로 단어를 잘라냄 */
s = strtok_r(buf, delim, &save); //받은 문자열을 단위로 잘라낸다.
while(s) {
arg[argv++] = s;
s = strtok_r(NULL, delim, &save);
}
/* 인수가 더 없음을 의미하는 문자 추가 */
arg[argv] = (char *)0;
/* 프롬프트로 입력 받은 첫 번째 단어가 ‘quit’이면 while 문 벗어남 */
if (!strcmp(arg[0], "quit"))
break;
if ((pid=fork()) == -1) /* fork 호출에 실패하면 */
perror("fork failed");
/* 부모 프로세스는 자식 프로세스가 종료되기를 기다림 */
else if (pid != 0) {
pid = wait(&status);
/* 자식 프로세스는 execvp를 이용하여 arg[0] 실행 */
} else {
execvp(arg[0], arg);
}
}
exit(0);
}
#include <stdio.h>
#include <stdlib.h>
void func1(void);
void func2(void);
void func3(void);
main()
{
/* exit 함수 호출 때 실행될 함수를 func1, func2, func3 순으로 등록 */
atexit(func1);
atexit(func2);
atexit(func3);
exit(0);
}
void func1(void)
{
printf("run function1\n");
}
void func2(void)
{
printf("run function2\n");
}
void func3(void)
{
printf("run function3\n");
}
sokoban's Blog is powered by Daum & Tattertools