본문 바로가기

Programming

[C언어] Linux Pthread & Signal, Itimer 간단 예제와 의문!! 비교적 정확한 주기로 특정 액션을 수행할 필요가 있어 SIGALRM을 주기적으로 발생시키는 setitimer() 를 사용해 보았습니다. 그런데 이해 안가는 부분이 있어 기록 차원에 간단한 예제를 만들어 설명해 봅니다. 아래 예제는 100ms 주기로 시간을 찍어서 이전의 시간과의 차이를 출력하는 간단한 예제입니다. 그런데 요부분...signal(SIGALRM, SIG_IGN);  /* note : why???  */SIGALRM이 발..
[C언어] simple hash table - test code
[SVN] ## 유용한 SVN 부가 명령어들 ## ## 유용한 SVN 부가 명령어들 ##1. svn help[PMU][ ~/project/apn/packages/wbp-2.0.0 ] (11:47:34 AM) $ svn --helpusage: svn <subcommand> [options] [args]Subversion command-line client, version 1.6.18.Type 'svn help <subcommand>' for help on a specific su..
[C언어] c/c++ gcc 디버깅을 위한 gdb 초간단 사용팁 1. gdb 사용을 위한 core 덤프 파일을 위한 준비작업 1.1 디버깅 정보를 포함하기 위해 gcc 컴파일 옵션의 CFLAGS 에 -g 옵션을 추가한다. ex) CFLAGS  += -Werror -Wlong-long -Wno-pointer-sign –g 1.2 core 파일의 크기를 설정한다. 보통은 무한대로 설정하면 편하다. ulimit –c unlimited # ulimit -a 로 확인 1.3 core 덤프파..
[C언어] Fast Integer ID Pool 관리 - 할당/반환 함수 #define INT_SLICE (sizeof(unsigned int)*8) #define MAX_ID 4095 #define ID_POOL_INT_SLICE_SIZE ((MAX_OAM_ID+1)/INT_SLICE) #define RET_OK 1 #define RET_NOK 0 unsigned int i..
[C언어] uint2bin char *uint2bin(unsigned int i) { static char s[32 + 1] = { '0', }; int count = 32; do { s[--count] = '0' + (char) (i & 1); i = i >> 1; } while (count); return s; }
[Lex&Yacc] Yacc 명령 그리고 Debugging!! Lex는 Scanner를 그리고 Yacc는 Parser에 해당하는 부분을 담당한다. 위 그림은 Lex/Yacc를 이용한 Parser를 사용하는 방법을 이야기한다. bas.y에 필요한 패턴(문법)을 기술하고 yacc를 이용해서 해당 패턴들에 대한 action을 구현한다. bas.y의 패턴에 해당하는 각각의 Token들은 bas.l에 정의를 하며 Regex의 Meta Chracter를 사용할 수 있다. <Pattern Matchin..
[C언어] IP 관련 매크로(Macro) Header => #include <netinet/in.h> #define IPV4_INT_TO_STR(int_ipv4_ptr) inet_ntoa(*((struct in_addr *)int_ipv4_ptr)) #define IPV4_STR_TO_INT(str_ipv4_ptr) (unsigned int) inet_addr(str_ipv4_ptr) [참고] 헤더 include가 빠지면 error: der..
[regex] 정규표현식 테스트 프로그램 - The Regex Coach Target string에 테스트할 문자열을 입력한 후 위의 Regular expression에 정규표현식을 넣으면 됩니다. 마우스로 특정 표현식을 선택하면 부분적으로 Match 되는 부분을 보여줘 원하는 정규표현식을 비교적 쉽게 만들 수 있습니다. 참고로 위 예제는 Dot(.)로 분리되는 가변의 Hexa String을 입력받는 정규표현식이 필요해서 만들어서 테스트를 해보았습니다. ([a-fA-F0-9][a-f..
[C언어] parse Mac Address int parse_mac_address(char *strNum, uchar_t rslt_hex[]) { int enteredNum = 0; int orgIndex = 0; int oprIndex = 0; char numChar[100]; while(orgIndex <= strlen(strNum)) { if (strNum[orgIndex] == ..
[C언어] Endian 체크 #define LITTLE_ENDIAN 1 #define BIG_ENDIAN 2 #define PDP_ENDIAN 3 #1 int get_endian() { static long int str[2] = { 0x41424344,0x0 }; /* ASCII "ABCD" */ if (strcmp("DCBA", (char *) str) == 0) return LITTLE_ENDIAN; ..
[C언어] BIT READ/WRITE MACRO #define READ_U8(_val, _ptr) { \ _val = *((unsigned char *) (_ptr)); \ } #define READ_S8(_val, _ptr) { \ _val = *((char *) (_ptr)); \ } #define READ_U16(_val, _ptr) { ..
[C언어] structure file dump and reading T_MMDB_EXT_VLAN_TAG_OPER_PROFILE = *MMDB_EXT_VLAN_TAG_OPER_PROFILE[MAX_MMDB_EXT_TAG_RULE]; // DUMPING #ifdef SUPPORT_GPON_EXT_VLAN_OPER sprintf(buf, "rm -rf %s", MMDB_EXT_VLAN_PROFILE_CONFIG_FILE); system(buf); fp = fopen(MMDB_EXT_V..
[C언어] HexaDump