본문 바로가기

전체 글

(772)
libcurl 관련 사용 예제 [1. 개요]curl_global_init() - 대부분의 플랫폼에서 스레드 안전 할 수 있으나, 보장하지 않는다. curl_easy_init() curl_easy_cleanup() curl_list_append() - 최초 NULL 인 경우 리소스를 할당해준다. - 반환 값이 NULL 일 수 있다. curl_slist_free_all() curl_easy_setopt()- CURLOPT_URL- CURLOPT_POST- CURLOPT_POSTFIELDS- CURLOPT_POSTFIELDSIZE- CURLOPT_HTTPHEADER- CURLOPT_USERAGENT- CURLOPT_WRITEDATA # CURLOPT_WRITEFUNCTION 를 사용하지 않는다면 # 반드시, FILE* 를 넘..
boost 비동기 이론 [1. 개요]boost 에서 비동기 프로그램 작성에 대한 배경 지식을 정리하도록 한다.io_contextstrandstd::enable_shared_from_this논블로킹 IO 와 달리 비동기 IO 는 별도의 스레드로 동작하는 이벤트 루프가 필요하다.논블로킹은 일종의 폴링 과 같은 방식이기 때문이다.[2. io_context]boost 에서 io_context 는 내부적으로 큐를 갖고 있고, 이 큐에 비동기 작업이 등록되며io_context.run() 을 호출하면 큐에 쌓인 작업을 하나씩 꺼내서 실행하게 된다.std::vector> threads;for (unsigned i = 0; i thread = std::make_shared( // 멀티 스레드를 통해 // io_con..
segmentation fault 사례 6 [1. 개요]C++ 표준에 근거한 멤버 변수 초기화 순서를 지키지 않음으로 인해 발생한 fault 사례 정리[2. 참조자]어떤 객체가 참조자를 멤버 변수로 포함하고 있는 상태에서,이 참조자가 제대로 초기화 되지 않고, 이 참조자를 접근 할 때 문제가 발생 할 수 있다. 일반적으로 참조자가 포인터 처럼 NULL 값 이 들어오는 상황은 거의 없지만, (컴파일 오류..)아래와 같은 C++ 표준 상, 참조자가 유효하지 않은 메모리를 가리키는 상황이 발생 할 수 있다.- 멤버 변수는 선언된 순서대로 초기화 된다.- 생성자 이니셜라이저 리스트 순서와 관계 없다.- ISO/IEC 14882, 12.6.2[3. 예제]#include class A{ public: int a; A(cons..