Language/C++

· Language/C++
다중 클라이언트가 접속하는 서버를 구현하는 베이스 코드입니다. 기존 1:1 방식이 아닌, N 명의 클라이언트에 대하여 select를 활용하여 각 클라이언트의 요청을 처리합니다. 현재 진행 중인 웹 브라우저와 리눅스 기반 응용 프로그램 사이, 중계 서버를 만들기 위하여 테스트 한 코드입니다. 개요 먼저, 일반적으로 알고 있는 socket의 개념과 별개로 select에 대하여 간략히 설명하자면, select는 네트워크 프로그래밍에서 사용되는 함수 중 하나로, 여러 개의 소켓을 모니터링하고 입출력 가능한 상태를 감지하는 기능을 제공합니다. 이를 통해 동시에 여러 소켓을 관리하고 비동기 네트워크 통신을 구현할 수 있습니다. 일반적으로 select는 유닉스 기반의 운영체제(Linux, mac, FreeBSD 등)..
· Language/C++
GS 인증을 받는 과정 중 암호가 저장된 일부 설정 파일(ini, json 등)에 대한 암호화 과정이 필요했습니다. 본문은 Linux (ARMv8) 환경에서 Crypto++를 설치(빌드)하고 예제 코드를 테스트하는 과정을 기록한 글입니다. 테스트 환경 Nvidia Jetson Xavier NX (Jetpack 4.6) Ubuntu 18.04 (Linux for Tegra) GCC 7.5.0 (C++17), CMake 3.24 설치 과정 먼저 Github를 통해 프로젝트를 다운 받았습니다. git clone https://github.com/weidai11/cryptopp.git cd cryptopp Crypto++는 GNUmakefile을 통해 리눅스 빌드를 지원하고 있었습니다. 저는 현재 개발 중인 프..
· Language/C++
MFC 기본 함수 중 DeleteDirectory(..) 함수는 폴더 내 파일 또는 하위 디렉토리가 존재할 경우, 해당 폴더까지 전부 삭제 후 동작된다. 따라서 야매로 만든 간단한 방법. cmd 명령어를 사용하는 코드이다. void CClientControl::DeleteDirectory_Shell() { CString strCmd; CString strTarget; // strTarget.Format(삭제할 폴더 경로 + 이름); // strTarget.Format(_T("E:\\Working\\test_folder")); 예시 strCmd.Format(_T("/c echo Y | cmd /c rd /s %s"), strTarget); ::ShellExecute(NULL, "open", "cmd", (..
· Language/C++
어느정도 개발을 진행하다보면 반드시 사용하게 되는 것이 DLL이다. DLL을 사용했을 떄 장점, 단점 등은 구글링을 해보면 수십개가 나온다. 필자는 DLL 사용을 아주 선호하는 편인데, 그 이유는 내 코드가 간결해 진다는 것이다. (모듈화의 장점 중 하나) 그냥 깔끔한 코드를 좋아한다. 본론으로 들어가, DLL을 로드하는 방법은 크게 Implicit Link, Explicit Link가 있다. 한국말로 묵시적(암시적) 링크, 명시적 링크라고 하는데.. 뭐 개인적으로 명시적 링크를 선호한다. 예제를 보면, 먼저 DLL을 하나 만들었다. (SampleDLL.dll) // SampleDLL.h #pragma once extern "C" __declspec(dllexport) void PrintName(void..
· Language/C++
윈도우 환경에서 프로그램을 개발하다 보면 자연스럽게 DLL을 사용하게 되고, 종종 DLL에서 특정 데이터를 전달하여 해당 값을 사용하는 경우가 생깁니다. 아래 예제는 명시적 방법으로 DLL을 로드하고, DLL에서 Notify를 통해 데이터를 전달하여 메인 프로그램에서 해당 값을 출력하는 예제입니다. 개요 프로그램 구조와 전반적인 동작 루틴은 아래와 같습니다. - Common - NotifyTestCommon : EXE와 DLL에서 공통으로 사용되는 구조체 또는 전처리문 정의 (.h) - Execute - NotifyTestExeDlg : EXE 메인 UI (.h, .cpp) - DLL 명시적 링킹을 위한 선언 // NotifyTestCommon.h #ifndef __cplusplus extern "C" ..
· Language/C++
일반적으로 두 프로그램 간 동기화 중 가장 간단한 방법은 while문을 통해 A 프로그램에서 전달한 신호가 B 프로그램에서 인식될 때 까지 기다린 후, 원하는 커맨드가 전달되면 프로그램을 실행하는 방법이 있습니다. 그러나 위 방법으로 개발을 진행할 때, A 프로그램에서 커맨드를 전달하는 부분이 많은 경우, 또는 B 프로그램에서 하나의 신호가 아닌, 다중 신호에 대한 처리를 진행할 때, while문에 막혀, 다른 프로세스가 처리되지 않을 수 있습니다. 아래 코드는 B 프로그램에서 while문을 사용했을 때, while문 루틴에 걸려 다른 코드가 실행되지 않음을 경험하고, 별도 Thread와 WaitForSingleObject를 통해 동기화를 처리했던 코드입니다. // header static bool g_..
· Language/C++
MFC란? Microsoft Foundation Class 마이크로 소프트에서 만든 클래스 MFC의 배경 윈도우 프로그래밍은 기본적으로 수많은 API가 사용된다. 이는 다양한 기능을 제공하지만 실제로 코딩을 하는 사람들에게 너무나도 복잡하고 많은 라이브러리로 개발자의 혼란을 불러 일으켰다. 따라서 마이크로소프트에서는 1990년 윈도우 API 함수를 캐슐화하여 라이브러리를 만들었고, 이후 이것은 MFC로 발전되었다. 따라서 MFC는 마이크로소프트에서 API 함수를 각 기능별로 클래스화한 형태로 만든 것이라 할 수 있으며 현재 MFC 라이브러리는 Visual C++에 기본적으로 포함되어 제공된다. MFC 계층도 MFC의 계층 구조를 간단하게 살펴보면 크게 CObject와 CObject에서 파생되지 않은 클래..
· Language/C++
참조자 (Reference) – 변수에 또 하나의 이름 지정 – 변수 앞에 & 연산자를 사용하여 선언 int A = 10; int &ReferenceA = A; 사용 목적 참조자를 사용한 Call by reference 호출 가능 (ex. swap 함수) #include using namespace std; void Swap(int& x, int& y) { // 참조자 사용 int temp; temp = x; x = y; y = temp; } void main() { int a = 100, b = 1; Swap(a, b); // int &x = a, int &y = b와 동일 cout
· Language/C++
포인터와 주소 포인터 메모리의 주소 값을 담고 있는 변수 또는 상수 데이터 위치를 가리키는 변수 주소 메모리 저장된 위치(번지) & 연산자를 사용하면 특정 변수의 주소를 반환 단항 간접 참조 연산자 #include void main() { int a; int *pa; a=10; pa=&a; printf("a: %d\n", a); // 10 *a=100; printf("a: %d\n", a); // 100 } 더블 포인터 #include void main() { int A = 50, B = 100; int* pA = &A; int** dpA = &pA; /* Test 1 */ printf("pA : %d\n", *pA); // 50 printf("dpA : %d\n\n", **dpA); // 50 /* T..
· Language/C++
지역 변수 (Local Variable) – 선언한 지역을 벗어나면 기억 공간에서 자동 소멸 – 지역은 { } 로 구분 #include int main() { int a = 30; { int a = 60; printf(“1. a: %d\n”, a); } printf(“2. a: %d\n”, a); return 0; } 1. a: 60 2. a: 30 정적 변수 (Static Variable) – 정적 변수 사용하면 영역을 벗어나도 메모리 공간에서 소멸하지 않음 – 값 또한 그대로 유지 – 일종의 한번 선언하고 나면 계속 유지되는 변수 – 초기화 하지 않으면 자동으로 0으로 초기화 #include void count() { static int c; c = c + 1; printf(“c: %d\n”, c);..
lasiyan
'Language/C++' 카테고리의 글 목록