C++ Socket 프로로그래밍 [POSIX]

C++ Socket 프로로그래밍 [POSIX] 💡 Quotation 네트워크 소켓(network socket)은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점이다. 오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으므로, 대부분의 네트워크 소켓은 인터넷 소켓이다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다. 소켓은 RFC 147에 기술사항이 정의되어 있다. wikipedia 소켓은 운영체제에 종속되어 있어 플랫폼마다 사용하는 방법이 아주 조금 다릅니다. 이 글에서는 유닉스 또는 리눅스에 사용되는 POSIX1) Socket 을 간단하게 소개하고 프로그래밍 방법을 소개합니다....

June 18, 2023 · 3 min · 518 words · JongBin Park

C++ 가변 길이 구조체

C++ 가변 길이 구조체 💡 Quotation Flexible array members were officially standardized in C99. In practice, compilers (e.g., GCC, Microsoft’s) provided them well before C99 was standardized. Flexible array members are not officially part of C++, but language extensions are widely available. 소켓 프로그래밍 중 가변 길이의 데이터를 보낼 방법을 찾다가 발견하게 되었습니다. 위 글처럼 C99에 공식적으로 표준화가 되었으며 C++ 에서는 공식적이지는 않지만 사용할 수 있습니다. 메모리에 연속된 공간으로 할당하며 통신할 때 유용하게 사용될 수 있습니다....

June 10, 2023 · 2 min · 337 words · JongBin Park

fmt 라이브러리로 C++ 콘솔 로거 작성하기

fmt 라이브러리로 C++ 콘솔 로거 작성하기 프로그램의 로그를 쓰기 위해 보통 Log4j, spdlog… 등 로거 프레임워크를 사용합니다. 사용하기 간편하며 강력한 기능을 제공합니다. 하지만 저는 fmt를 이용하여 간단히 사용할 수 있는 콘솔 로거를 작성해보려고 합니다. 😎 쉽고 간단한 길 놔두고 이상한 길 가기 ⚠️ Warning 상용 프로그램에서 아래와 같이 로그를 사용한다면 스레드로 인한 작동 오류가 있을 수 있습니다. fmt를 사용해보기 위해 간단히 작성된 것이므로 로거 프레임워크를 사용하기를 권장합니다. fmt 💡 {fmt} is an open-source formatting library providing a fast and safe alternative to C stdio and C++ iostreams....

May 27, 2023 · 3 min · 581 words · JongBin Park

C++ 예외 처리 try catch throw

C++ 예외 처리 try catch throw C 언어와 다르게, C++은 애러를 핸들링할 수 있는 try-catch문을 제공합니다. 비교 조건문 if 예외 처리 try-catch 핸들링 return 값의 구분으로 핸들링 throw 를 사용하여 catch로 분기 및 예외 처리 단점 return 자료형에 종속적 반드시 try-catch 블럭에서 처리 조건문은 반환 값의 구분으로 핸들링하기 때문에 반환하는 자료형에 종속적입니다. 예를 들어 char getSome()이라는 함수에서 예외 처리를 하고 싶은데 char형으로 어떻게 구분을 지을 수 있을까요?...

May 12, 2023 · 4 min · 754 words · JongBin Park

데이터 구조 정렬 (Data Structure Alignment)

데이터 구조 정렬 Data Structure Alignment Processor 대부분의 컴퓨터는 32비트 또는 64비트의 프로세서를 갖고 있습니다. 이는 프로세서가 데이터를 처리할 때 사용하는 레지스터1)의 크기, 데이터들의 전송 통로인 버스의 폭에 따라 결정됩니다. 💡 Tips Bit Byte Count Range 8 1 \(2^{8} = 256\) -128 ~ 127 32 4 \(2^{32} = 4,294,967,296\) −2,147,483,648 ~ 2,147,483,647 64 8 \(2^{64} = 18,446,744,073,709,551,616\) –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 맨 왼쪽 비트는 부호를 나타내는 비트이고, unsigned를 붙이면 부호 비트 자리도 데이터가 올 수 있음...

May 11, 2023 · 3 min · 635 words · JongBin Park