본문 바로가기

C26

[C/C++] C++ JSON parser example, C언어 JSON 파서 예제, rapidjson C++ JSON parser example 본 json_parser 라이브러리는 rapidjson을 활용한 wrapper이다. 이미 그 자체로 훌륭한 JSON parser 인 rapidjson은 소스코드가 아닌 헤더로만 구성되어있고 사용자의 역량에 따라 코드 표현이 천차만별이라 같은 선언, 같은 메서드, 같은 출력을 보장하기 위해(공용화) wrapper class를 만들게 되었다. * rapidjson 홈페이지, tutorial이 무척 잘되어있다. https://rapidjson.org/ RapidJSON: Main Page A fast JSON parser/generator for C++ with both SAX/DOM style API Tencent is pleased to support the op.. 2022. 1. 17.
[C/C++] C언어 MAC 주소 읽기 구현, get mac address C언어 MAC 주소 읽기 구현 MAC 주소를 얻는 소스 코드를 구현한다. 네트워크 관련 처리를 하다보면 MAC 주소가 필요한 경우가 자주 발생한다. 이 역시 shell 명령을 통해 MAC 주소를 얻는거보다 소스코드로 구현하는게 깔끔하고 빠르다. 소스코드 이 역시 C언어로 변경하여 사용할 수 있다. 단지 return type을 string으로 받고 싶어 cpp로 했을 뿐. C언어 타입으로 변경하려면 cpp 요소만 제거하여 사용하자. * 이더넷 인터페이스가 많은 경우 count_if 항목에서 req->ifr_name 의 인터페이스명을 보고 판단하여 mac 주소를 획득하면 된다. 물론 한번에 다 얻을 수 도 있으니 활용하자. #include #include #include #include #include #i.. 2022. 1. 16.
[C/C++] C언어 icmp, ping 구현 C언어 icmp, ping 구현 C언어를 이용한 icmp, ping 을 구현하였다. 이따끔 network target의 alive 상태를 체크해야할 일이 있다. Rest API 요청이라던가 TCP session 개시 라던가 뭔가 network request 상황에서 system time_wait, fin_wait, response block 등 여러 상황에 빠지는 상황을 만들지 않으려면 애초에 안보내는게 제일 깔끔하기 때문이다. 그래서 icmp check를 한 후 정상적인 상황에서만 network 적인 작업을 수행한다. 소스코드 - TIME_LOOP_WAIT는 200ms 간격으로 icmp를 체크하겠단 의미다. - COUNT_CHECK_LOOP는 5회 동안 체크하겠단 의미다. 즉, 한번에 응답이 오지 않는.. 2022. 1. 16.
[C/C++] select 를 활용한 non-block I/O, FD_SET, FD_ISSET select를 활용한 event check, FD_SET, FD_ISSET select() 를 이용하여 non-block I/O 처리를 만들어보겠다. 크게 아래의 과정을 거쳐서 동작한다. 1. FD_SET 을 통한 descriptor 셋팅 2. FD_SET된 FD_LIST들을 select() 를 통해 event 검사 3. timeout 시 동작할 행위 4. timeout 전 event 발생 시 FD_ISSET 처리 소스코드 내에 주석을 달아뒀으니 참고하여 활용하자. 소스코드 #include #include #include #include #include #include #include #include #include #include int main(int _argc, char *_argv[]) { int.. 2022. 1. 14.
[C/C++] 전역 네임스페이스, 시스템 함수와 동일한 클래스 메서드 이름 사용 방법 전역 네임스페이스, 시스템함수와 동일한 클래스 메서드 이름 사용 방법 C++ class method명이 시스템 함수와 같은 경우에는 사용할 시스템 함수명 앞에 :: 을 붙여주자. 이는 전역 네임스페이스 란 의미인데, 식별자가 명시적 네임스페이스에서 선언되지 않은 경우 암시적 전역 네임스페이스에 포함되기 때문이다. 이렇게해서 되면 동일한 이름과 해당 식별자(동일한 method명과 시스템 함수)가 구분을 할 수 있다. 예제 void Handler::write(string _data) {// method - write() ::write(this->dev_fd, _cmd_id.c_str(), _data.length());// system function - write() return ; } void Handle.. 2022. 1. 14.
[C/C++] C++ curl handler class 예제, C언어 curl 구현 C++ curl handler class 예제 C언어 curl, C++ curl, libcurl, linux curl C++ 클래스로 curl 을 쉽게 사용하게끔 구현하여 공유한다. 혹시 C에서 사용하고 싶다면 해당 소스코드의 클래스 내에 libcurl 함수를 제어하는 부분만 뽑아서 사용하길 바란다. https://github.com/muabow/home/tree/main/library/cpp/api_curl GitHub - muabow/home: C/C++, PHP, GO source/library C/C++, PHP, GO source/library. Contribute to muabow/home development by creating an account on GitHub. github.com 목.. 2022. 1. 13.
[C/C++] C언어 Big-endian <-> Little-endian 상호 변환 C언어 빅엔디안 리틀엔디안 상호 변환 C언어로 작성된 엔디안 체크 방법과 빅엔디안과 리틀엔디안 간 상호 교환하는 방법이다. 소스코드 1. 엔디안 체크 방법 int value = 1; if( *(char *)&value == 0 ) { printf("Big-endian\n"); } else { printf("Little-endian\n"); } 2. 전체 코드 #include // function : change to little-endian int to_le(int _target) { unsigned char bytes[4]; int ret; bytes[0] = (unsigned char)((_target >> 24) & 0xff); bytes[1] = (unsigned char)((_target >> .. 2022. 1. 13.
[C/C++] sprintf indicator 및 format 관련 sprintf indicator 및 format 관련 영어 원문을 포맷만 정리했다. 크게 어려운 내용은 없고 예제의 포맷과 결과만 봐도 도움이 될 것으로 보인다. The sprintf format of Ruby is basically the same as that in C. However, there are some differences, such as no short or long modifier as in C, there is a 2-bit variable indicator (%b), and not all of the dialects of sprintf (': 3-digit separators) are supported. A complete explanation of Ruby's sprintf for.. 2022. 1. 13.