본문 바로가기

c언어22

[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.
[C/C++] 리눅스 C언어 소켓 통신 서버, C++ socket server example 리눅스 C언어 소켓 서버 socket server example 소스코드를 공유한다. 리눅스 C++ 로 작성되었고 이전에 포스팅했던 signal handler library 를 활용하였다. https://muabow.tistory.com/200 [C/C++] signal handler library 활용과 소스코드 공유 signal handler library C/C++ 에는 signal.h 를 사용한 signal 함수가 존재한다. 시스템 인터럽트 외 여러 상황에 사용할 수 있기 때문에 필수로 시그널 처리를 하게 된다. 가장 쉬운 예를 들면 ctrl + c를 통해 muabow.tistory.com 자세한 개발환경, 디렉토리 구성, 빌드 방법 등은 github의 README.md 참고하자. https://.. 2022. 1. 11.
[C/C++] 오름차순 정렬, 내림차순 정렬 C언어, qsort 활용 [C/C++] 오름차순 정렬, 내림차순 정렬 C언어, qsort 활용 qsort 함수를 이용한 오름차순/내림차순 정렬 함수 구현을 해보자. qsort는 quick sort의 약자로 배열을 정렬하는 함수이다. quick sort에 대해 간단히 설명하면 원소와 다른 원소의 비교로 정렬하는 비교 정렬이다. 알고리즘적인 내용을 터치할 건 아니니 바로 함수 원형과 사용법을 알아보자. qsort 헤더 및 원형 #include void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); qsort 함수의 인자를 쉽게 풀이해보면 다음처럼 이해하면 쉬울 것이다. qsort(, , , ) 꼭 정수 배열일 필요는 없다.. 2022. 1. 10.