프로젝트 시연 1M integer를 사용할 것 코드 부분 설명 (5~10분), 실행 ./lvm_write –L1M 4M - 각 data0/1/2/3 크기가 1MB인지 여부 확인 - od –i data0/1/2/3의 내용이 맞는지 확인 ./lvm_write –S64K 4M - od –i data0/1/2/3의 내용이 맞는지 확인 (RR unit = 16 integer 씩)
실습 Client는 100개의 random number를 server에서 보냄 Server는 각 숫자를 받아서 평균을 계산한 후, client에게 보냄 Client는 평균 값을 화면에 출력 함 TCP & UDP로 작성 실습 전 프로젝트 시연을 원하는 팀은 Demo
시그널과 시그널 처리 SIGINT(Ctrl_C), SIGILL(illegal instruction), SIGTERM(termination) 한 프로세스는 시그널과 관련해서 Signal handling Signal Blocking Send signal to other process <signal.h>에 각 시그널이 정의 시그널 처리 Default ; 프로세스 종료 (SIGUSR1, SIGUSR2 – 시그널 무시) Ignore signal
시그널과 시그널 처리 시그널 집합 – sigset_t 시그널 초기화 sigaddset, sigdelset Sigemptyset (모든 시그널 제거) Sigfillset (모든 시그널 포함) sigaddset, sigdelset Sigemptyset + sigaddset / sigfillset + sigdelset (P181)
시그널과 시그널 처리 Sigaction 시그널이 수신되기 전에 sigaction이 반드시 호촐 SIGSTOP, SIGKILL은 signal handling이 따로 정의될 수 없음 int sigaction(int signo, const struct sigaction *act, struct sigaction *oact) struct sigaction { void (*sa_handler)(int); //sighandler sigset_t sa_mask; // 봉쇄할 signal int sa_flags; // signo action 변경 void (*sa_sigaction)(int siginfo_t *, void *); }
시그널과 시그널 처리 Sigaction Signal handler 정의; 예제 (p184) SIGINT 무시; test2.c 복원 act.sa_handler = SIG_DFL; sigaction(SIGINT, &act, NULL); 이전 행동 복원 sigaction(SIGTERM, NULL, &oact); act.sa_handler = SIG_IGN; sigaction(SIGTERM, &act, NULL); ….. sigaction(SIGTERM, &oact, NULL);
시그널과 시그널 처리 Sigaction Signal handler 정의; 예제 (p184) SIGINT 무시; test2.c 복원 act.sa_handler = SIG_DFL; sigaction(SIGINT, &act, NULL); 이전 행동 복원 sigaction(SIGTERM, NULL, &oact); act.sa_handler = SIG_IGN; sigaction(SIGTERM, &act, NULL); ….. sigaction(SIGTERM, &oact, NULL);
시그널과 시그널 처리 sigsetjmp, siglongjmp int sigsetjmp(sigjmp_buf env, savemask); void siglongjmp(sigjmp_buf env, int val); (예제 p191) if(sigsetjmp(position, 1) == 0) { act.sa_handler = goback; sigaction(SIGINT, &act, NULL); } domenu; … void goback(void) { fprintf(stderr, “\n Interrupted\n”); siglongjmp(position, 1);
시그널과 시그널 처리 sigprocmask(int how, const sigset_t *set, sigset_t *oset) sigset_t set1, set2; sigfillset(&set1); sigfillset(&set2); sigdelset(&set2, SIGINT); sigdelset(&set2, SIGQUIT); … sigprocmask(SIG_SETMASK, &set1, NULL); sigprocmask(SIG_UNBLOCK, &set2, NULL); …. sigprocmask(SIG_UNBLOCK, &set1, NULL);