본문 바로가기

IT/programming42

[C/C++] C++ 프로그램/함수 실행 시간 측정, ms 밀리초 기준 C++ 프로그램/함수 실행 시간 측정 C++ 에서 사용할 수 있는 프로그램/함수 실행 간 시간 측정 방법을 공유한다. chrono 를 이용하여 작성하였고 밀리초(ms) 단위로 측정하였다. 더 작은 단위가 필요하다면 duration_cast 의 인자를 원하는 단위로 변경하여 사용하면 된다. 소스코드 - 100ms 씩 10번을 sleep 하여 1000ms(1초) 에 근사한 측정치를 보여주는지 확인하자. #include #include #include using namespace std; using namespace chrono; int main(int _argc, char *_argv[]) { system_clock::time_point t_time_begin, t_time_end; milliseconds .. 2022. 1. 18.
[JAVA] 클래스와 메서드 설명 JAVA 클래스와 메서드 설명 javac - 컴파일러, class 확장자를 가진 자바 코드(byte code)를 생성, byte code는 UNIX나 기타 OS에서도 문제없이 실행된다. * java 파일은 항상 해당 파일이 있는 디렉토리에서 컴파일 하고 실행 요약 실행과정 방법 내용 소스 작성 및 저장 코딩과 저장 클래스 이름.java, 클래스명과 파일명이 같아야 한다. 컴파일 javac 클래스 이름.java 컴파일 툴을 이용, 클래스 이름.class 바이트코드를 생성한다. 실행 java 클래스 이름 실행툴을 이용, 바이트코드를 인터프리팅한다. JDK 자주 사용하는 툴 정리 툴(TOOL) 용도 javac 자바 컴파일러 java 자바 실행, 바이트코드 인터프리터 javadoc 자바 API문서(도큐먼트) 생.. 2022. 1. 18.
[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.
Rest API 요청 언어별 정리, CURL/PHP/PYTHON/C/C++/QT/JAVA/Node.js Rest API 요청 언어별 정리 Rest API 호출 방식 소스코드를 각 언어 별로 정리해보았다. 무엇을 좋아할지 몰라 잔뜩 준비 했으니 쓸모가 있었으면 좋겠다. 준비한 언어 목록은 다음과 같다. - 목록 - 1. CURL 2. PHP 3. PYTHON 4. C/C++ 5. QT 6. JAVA 7. Node.js # 소스코드 - 각각의 요청은 http://httpbin.org/get 를 대상으로한다. - GET method 한정하여 작성. 코드 내 POST로 변경할 수 있는 요소들이 있으니 필요하면 수정해서 사용할 것. - 모든 request의 response 응 동일하기 때문에 가장 아래에 응답 결과로 정리한다. 1. CURL - OS: Ubuntu 16.04.7 LTS, Version: curl 7.. 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.