본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]최남식-2011년10월26일일일보고서

by 알 수 없는 사용자 2011. 10. 26.
728x90
반응형

멀티 플렉싱 채팅

주어진 문제는 인터럽트 문자인(control+C)을 이용하여 server 나 client 에서 안전하게 프로그램을 종료 시키는 것이다.
-시그널은 어떤 이벤트가 발생했을 경우 여기에서는 control+c가 발생 하였을 때 운영체제가 프로그램에 이를 알리는 기법입니다. 프로그램에 시그널이 전달되는 경우에 4가지 정도의 상황이 발생 할 수 있다.
1.(운영체제에 의해) 시그널이 무시되는 경우.
2.프로그램이 강제 종료되는 경우.
3.프로그램 실행이 인터럽트 되며 ,이 후 프로그램이 지정한 시그널 처리 루틴 즉 해당하는 함수가 실행되게 할 수도 있습니다.
4.시그널이 블로킹 되어 프로그램이 시그널을 허용할 때까지 아무런 영향을 받지 않는 경우가 있습니다.

프로그램은 특정 시그널에 대한 기본 동작을 sigaction()을 이용하여 바꿀 수 있습니다.

-> 첫번째 인자는 기본동작을 변경하려는 해당 시그널 TYPE을 나타냅니다. TYPE에는 수십개의 시그널들이 있으며 대표적인 종류로는 SIGALARM,SIGCHLD,SIGINT등이 있고 여기서는 SIGINT를 사용 할 것이다.  두번째 인자는 변경하려는 동작이 정의되어 있는 sigaction구조체를 가리킨다.
세번째 인자는 프로그램이 수행될때 Newaction을 등록시키면 기존에 등록되어 있던 action이 빠져 나오게 되는데 그것이 Oldact를 의미한다.


두번째 인자인 변경하려는 동작이 정의되어 있는 sigaction구조체에 해당함수에 대한 주소를 받아 동작을 시키는 것은 우리가 기존에 배웠던 API에서 Winmain함수와 (방식이 조금 다르긴 하지만)ARM에서 해당 PID에 함수주소를 직접 기입하는 것과 같은 원리이다.


->API에서  보면 Wndclass구조체에 Wndproc의 함수의 주소(함수의 이름)가 전달되어 우리가 지정한 메시지 함수가 처리되게 됩니다. 함수는 스택에 가변적으로 쓰여지게 되고 sigaction구조체에 setting되어지는 방식도 이와 같습니다.

->ARM에 경우도 해당 PID에 인터럽트가 들어오면 함수가 실행되지만 직접함수주소를 넣어주므로 고정적인 방식으로 이루어집니다.

sigaction 구조체 usr/include/bits/sigaction.h

-> 구조체에 멤버를 보면 함수 포인터로 나타난 부분이 해당 함수를 가리키는 함수주소 부분이다.

시그널을 발생 시키기 위해 추가된 부분만 나타내었습니다.(아직 미완성이 이해 바람)


 

->구조체를 0으로 초기화 한뒤 Socket_close함수를 핸들러 함수로 지정 한뒤 sigaction 동작 시킨다.

 

memcmp manpage


->strcmp와 memcmp의 차이점은 strcmp NULL이 오면 문자끝으로 생각하고 NULL앞까지만 반영하지만 memcmp는 다 반영하게 된다.
ex)strcmp\0123과 strcmp\0567을 같은 값을 반영 하지만 memcmp는 다르게 본다.



728x90