한글 putty http://openlook.org/distfiles/PuTTY/HangulPuTTY-0.53b.h3.exe 한글처리가 강화된 putty 한글판 설정변경->창->모양 에서 커서 모양을 사각형(커서 깜빡임)하고 쓰니 한글이 안깨져서 쓰기 편하다. C언어 2009.04.20
[코드정리] if else 문을 한줄로 if문에서 처리하는 명령어 하나 else문에서 처리하는 명령어가 하나일때 이걸 하나의 문장으로 줄여서 처리할수 있다. c; a = 10 b = 20 if ( a > b ) c = a else c = b 위 조건식을 한줄로 표현하면 다음과 같다. c = ( a < b ) ? a : b 사용법만 안다면 이렇게 사용하는것도 나쁘지 않은것 같다. C언어 2009.04.13
[코드정리]debuging 함수 일반적인 경우 디버깅 함수를 추가할 경우 조건부 컴파일을 이용해서 처리한다. 간단히 예를 보면 #ifdef DEBUG fprintf(stderr,'[%d:%d]\t%s\n",__FUNCTION__,__LINE__,msg ); #endif 그런데 이런식으로 하나의 값을 보기 위해 #ifdef부터 해서 3개줄로 표시를 해야한다. 본인 경험으로는 이런 코드가 많이 질수록 코드가 간결.. C언어 2009.04.13
time 33 hash function ( apr에서 사용하는 해시 함수 ) apr 소스 코드를 시간날때 살펴보고 있는데 apr 코드중에 동적 해시가 있어서 테스트를 해보았더니 속도가 비교적 빨랐다. 지적 호기심이 발동하여 어떻게 구현했는지 한줄한줄 읽어가며 소스 코드를 분석을 시작했다. 여러가지 이유가 있었지만 정확히 어느 부분이 포인트인지를 보기 위해 메모리플.. C언어 2009.03.28
대용량 검색을 위한 TRIE 업그레이드 대용량 데이터를 검색할 일이 생겼다. 사용목적은 개인적 용도이고 prefix search가 가능해야 한다. b+tree 또는 trie로 구현을 해야할것 같은데 b+tree라면 굳이 구현할 필요 없이 리눅스에 있는 버클리 db를 쓰면 된다. 그런데 문제는 데이터가 커지면 버클리 db가 상당히 느려진다는 것이다.( 밸런스 잡는데도.. C언어 2009.03.26
[APR] character string handling 8. character string handling c개발자라면 strlen()또는 strcpy() 와 같은 문자열 API에 익숙할 것이다. libapr에서도 문자열 API를 제공한다. ANSI c와 거의 유사하다. 왜 libapr은 약간 다른 문자열 APR을 제공하는가? libapr 문자열 API의 장점은 메모리 플과 관련이 있다. C언어의 문자열 처리에서는 메모리 처리와 관련된 .. C언어 2009.01.30
[APR] file-system directory handling 7. file-system directory handling 파일 시스템 디렉토리를 다룰때, 먼저 apr_dir_open()를 사용해야 한다. apr_dir_open()함수로 apr_dir_t오브젝트를 얻는다. apr_dir_read()로 apr_dir_t를 가지로 디렉토리를 스캔할수 있다. 디렉토리를 닫기 위해서는 apr_dir_close()를 호출한다. 프로토 타입을 보면 apr_status_t apr_dir_open(apr_dir_t **n.. C언어 2009.01.30
[APR] file lock 6. file lock 프로세스들 중에 파일에 락을 걸려면 apr_file_lock()를 호출하면 된다. 역사적으로 유닉스 시스템에서 파일 락 API에 대해서 여러가지 혼란이 있었으나 libapr에서 제공하는 간단한 API는 매우 유용하다. apr_status_t apr_file_lock(apr_file_t *thefile, int type); apr_status_t apr_file_unlock(apr_file_t *thefile); apr_file_lock(.. C언어 2009.01.30
warning assignment makes pointer from integer without a cast apr로 프로그램을 테스트 하던중 심심치 않게 보이는 경고 메세지다. "변수형이 말없이 바뀌었다" 대충 이런 메세지인데 이런 메세지가 발생한 원인을 살펴보니 다음과 같다. 함수 원형이 정의되지 않는 경우 컴파일러는 함수의 리턴값을 int로 가정한다. 그런데 실제 사용한 부분에서는 int가 아닌 타입.. C언어 2009.01.30
[APR] Container APIs 19.컨테이너 APIs 19.1 동적 배열 c언어에서 일반적인 컨테이너 타입은 배열의 형태를 띄고 있다. 그러나 배열의 크기는 보통 고정 크기이지만 libapr은 동적배열을 제공한다. apr_tables.h에 보면 API들 정의가 있는데 컨테이너 타입의 동적 배열로써 특정을 보면 append efficient(API support) insert/prepend inefficient(no AP.. C언어 2009.01.29