전체 글 216

C++ Programming HOW-TO

C++ Programming HOW-TO Al Dev (Alavoor Vasudevan) alavoor (at) yahoo.com 정지용 ways (at) gon.kaist.ac.kr 이 문서는 C++에 관한 URL과 C++ online 책에 대한 링크, C++ 프로그래밍 팁 등을 포괄적으로 제공한다. 이 문서는 C++에서 겪는 다양한 메모리 관련 문제를 해결해주는 Java와 비슷한 library도 제공한다. 이 library를 이용하면, java 소스코드를 C++로 컴파일 할 수도 있다. 이 문서는 "C++ 언어의 집"역할을 한다. 이 문서에서 제공되는 정보는 C++ 언어를 적절히 사용하고 모든 운영체제 - 리눅스, MS-DOS, BeOS, Apple Macintosh OS, Microsoft Wind..

Public/tip & tech 2008.07.08

장단점의 관점

누구나 장단점이 있다. 장점을 극대화하는 방법으로 자신을 발전시키는 것보다 단점을 찾아 고치는 방법이 더 그윽한 만족감을 준다고 생각한다. 장점은 살리는 기운 즉 양이고 단점은 음이라고 할 수 있다. 자신을 발전시키기 위해 양의 요소인 장점을 살리면 성공 부귀 명예가 뒤따른다. 하지만 단점을 찾아 고치면 내면의 성숙함과 기쁨을 얻을 수 있다. 물론 대인관계에서 남의 단점보다는 장점을 찾아 말해주는 것이 좋은 인간관계에 도움이 된다. 하지만 진실한 친구라면 그 사람의 단점을 직시하고 고치도록 이끌어주고 지도해주는 것이 진실한 친구가 아닐까? 왼발을 잘 쓰는 축구선수를 왼발을 잘 쓰도록 좋은 포지션에 갖다 놓고 왼발의 능력을 극대화 하는 것보다는 오른발도 균형 있게 쓸 수 있도록 단점을 고치는 축구지도 방법..

관능적인 쾌락은 행복에 유익할까?

'아무도 날 찾는 이 없는/외로운 이 산장에(중략) 세상에 버림받고/사랑마저 물리친 몸/병들어 쓰라린 가슴을 부여안고/나 홀로 재생의 길 찾으며 외로이 살아가네' 자신의 노랫말대로 '산장의 여인'이 되어 독신으로 외롭게 살던 가수 권혜경은 77세에 지병 악화로 숨을 거뒀다. 정말 말이 씨가 된 것일까? 말로 해도 외롭고 슬픈 것을 노래로 불렀으니 결국 외롭고 쓸쓸하게 살다가 세상을 하직하게 된 것은 아닐까? 우리는 객관적 세계를 있는 그대로 보고 경험하는 것이 아니라 언어를 통해 인식한다. 산장의 여인의 노랫말은 쓸쓸함, 외로움이 느껴진다. 이를 같은 상황이라고 가정하고 긍정적인 언어로 바꿔보자 '아무도 날 찾을 이유 없는/조용한 이 산장에(중략) 세상의 속박에서 벗어나/사랑마저 극복하고/기쁨에 벅찬 가..

Wait Child process termination & Zombi process

부모프로세스는 자식 프로세스 종료에 대해 정보를 얻고 싶다. (왜 죽었나, 에러가 있었나 등등..) 그래서 자식이 종료될 때 좀비로 만들어 부모 프로세스가 자식의 상태를 체크할 수 있도록 해준다. 소위 waiting on zombie process라고한다. 종료된 자식 프로세스를 기다려 상태를 얻어오는 함수가 wait()인데 아래같이 생겼다. #include #include pit_t wait(int *status); 이 함수를 실행하면 자식이 죽을 때까지 블럭 된다. 종료될 때 받은 status값을 아래 매크로?함수?를 통해 상태를 파악할 수 있다. int WIFEXITED(status) : 정상 종료인지 int WEXITSTATUS(status) : 종료시 상태값 (0, 에러...) int WIFSI..

Public/tip & tech 2008.06.24

Resource Limits

시스템의 리소스 제한값을 보거나 설정하는 것은 아래 함수를 통해 할 수 있다. #include #include struct { rlim_t rlim_cur; // soft rlim_t rlim_max; // hard }; int getrlimit(int resource, struct rlimit *rlim); int setrlimit(int resource, const struct rlimit *rlim); 리소스 제한 값에는 soft limit과 hard limit 두가지가 있는데, soft limit는 hard limit 한도내에서 자유롭게 변경할 수 있다. 각 값들은 0인 경우 disable이고, RLIM_INFINITY(-1) 인 경우 무한대이다. limit 값들의 flag 이름들은 아래와 같다...

Public/tip & tech 2008.06.24

Threads Condition variable

Thread를 동기화하는 다른 방법 중의 하나로 Condition variable을 사용하는 것이 있다. condition variable을 잘 사용하면 race-free한 thread 코드를 만들 수 있다. condition variable자체는 mutex 에 의해 보호된다. 때문에 condition 상태를 바꾸기 위해서는 먼저 mutex lock을 걸어줘야한다. condition variable(이하 cv) 초기화는 두가지 방법이 있는데, cv가 static이면 PTHREAD_COND_INITIALIZER를 넣어주면 되고 dynamic 이면(동적 할당되었으면) pthread_conf_init()을 쓰면된다. 사용이 끝나면 pthread_cond_destroy()를 호출해준다. #include // 0..

Public/tip & tech 2008.06.24

TCP Status

TCP연결시에는 알다시피 3way handshaking을 한다. close시에는 client, server 가 각각 FIN을 보낸 후 ACK를 받는다(총 4번의 트랜젝션). TCP연결에는 여러개의 상태가 있는데, netstat으로 확인할 수 있는 상태들에 대해 간단히 정리해보면, 서버에서 listen()이 호출되면 상태는 LISTEN으로 바뀐다. 이 때 client에서 SYN을 보낸 후 SYN_SENT로 상태가 바뀌면 서버에서 이를 받고 SYN_RCVD로 바뀌고 SYN ACK를 보내준다. 그리고 client에서 SYN을 다시 받게 되면 비로소 ESTABLISHED로 바뀐다. 이 후 send(), recv()군의 함수들로 계속 통신을 하다가 client에서 close()호출로 인해 FIN 을 보내고 FIN..

Public/tip & tech 2008.06.24

Socket Option

소켓 사용시 여러 옵션을 줄 수 있는데, 아래 함수를 통해 set, get이 가능하다. int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int s, int level, int optname, void *optval, socklen_t *optlen); 설정할 수 있는 옵션은 영역이 매우 다양한데(이를 테면, TCP에서의 옵션이라던가, IP레이어에서의 옵션이라던가 등...), 어느 영역에서의 옵션을 설정할 것인지를 두번째 인자인 level에서 선택할 수 있다. 몇개의 옵션들은 아래와 같다. SOL_SOCKET SO_BROADCAST SO_REUSEADDR TCP의 TIME_WAIT상태의..

Public/tip & tech 2008.06.24