본문 바로가기

전체 글

(772)
버퍼에 안전한 문자열 함수 [1. 개요]기존 strcpy 나 strcat 등은 버퍼 길이를 체크하지 않아서, 버퍼 오버플로우에 취약 함.그래서 버퍼 길이를 인자로 받는 버퍼에 조금 안전한 문자열 함수가 있어,가급적 이러한 함수를 사용하는 것이 권장 됨 함수 목록strncpystrncatsnprintfstrncmp마지막 NULL 문자로 채워지는 것을 보장하지 않음.const char* cstr = "Hello" 를char buf[5] 에 복사 시, buf[4] = 0; 이 아님 가급적, (총 버퍼 길이 - 1) 을 넘기는 편이 좋아 보임 또한, strncat 에서는 (concat 위치 부터 남은 버퍼 길이 - 1) 을 넘기는 편이 낫다.[2. 예제]#include #include int main(){ const char* st..
스레드에 안전한 localtime() [1. 개요]localtime() 함수는unix timestamp 에 대해서, 연/월/일 시간/분/초/밀리초 단위로 구할 수 있다. 그러나, 리턴 값에 대해서 리소스를 해제하는 코드가 없기에 내부적인 정적 버퍼의 주소를 리턴 하는 듯 한데,실제로 그러하다. 따라서 이 함수는 스레드에 안전하지 않다.스레드에 안전한 함수는 플랫폼 별로 아래와 같다.Linux 계열 : localtime_r()Windows 계열: localtime_s()[2. localtime_r 예제]#include #include int main(){ const std::time_t ntime = std::time(nullptr); const struct tm * tm0 = localtime(&ntime); std::cou..
libcurl 빌드 [1. 개요]윈도우(Windows10, 32bit 용 라이브러리) 와 리눅스 (Centos7 기준) 에서 libcurl 을 소스코드에서 빌드 하는 방법을 정리한다.libcurl 빌드 시, 별도의 옵션을 명시하지 않으면, https 통신은 되지 않는다.여기서는 https 통신을 위해 openssl 을 이용하여 빌드 하도록 한다.openssl 빌드 방법은 아래 참조https://testkernelv2.tistory.com/792https://testkernelv2.tistory.com/791CMake 를 이용하는 방법도 있으나, 아래 방법을 사용하는 편이 더 좋아 보임[2. 리눅스 기준]github 등에서 소스코드 압축파일 해제 후, 폴더 진입 한 곳을 현재 디렉터리가 가정하면,$ autoreconf -fi..