no image
[System] Thread
Thread 이전의 WaitForSingleObject를 이용하여 Event가 Set 되기를 기다린다면, Main Thread가 Wait 상태에 빠지게 되므로 다른 프로세스를 생성해 Set을 해주어야 함 WaitForSingleObject를 수행하는 새로운 Thread를 생성한다면, 하나의 프로세스에서 Event를 Wait하고 Set할 수 있게 됨 HANDLE m_hEvent = NULL; void createEvent() { CloseHandle(m_hEvent); m_hEvent = ::CreateEvent(NULL, TRUE, FALSE, L"TEST_EVENT"); if (m_hEvent == NULL) { if (GetLastError() == ERROR_ALREADY_EXISTS) { m_hE..
2024.01.04
no image
[System] Event
Event CreateEventA() 어떤 시점을 나타날 때 사용 WaitForSingleObject의 인자가 됨 Signaled(Set), Non-Signaled(Reset) 상태가 있음 한 Event를 다수의 Process가 지켜볼 때, 하나의 Process가 Triggered 되면 Auto Reset됨 -> 나머지 Process는 Auto Reset 때문에 Set을 수신하지 못하고 계속 기다리게 됨 -> 이를 ManualReset으로 변경하면 다른 Process도 Triggered 되게 할 수 있음 이름을 지정할 수 있는데 이미 있는 이름이라는 오류가 난다면 Create 하지 말고 Open으로 사용 HANDLE m_hEvent = NULL; void createEvent() { CloseHandle..
2024.01.03
no image
[System] WaitForSingleObject
WaitForSingleObject SingleObject가 시그널에 의해서 또는 타임아웃에 의해서 종될 때까지 기다림 Process의 종료 대기, Mutex 값 변화 감지, Event 객체 등에 사용하지만, 주로 Process 동기화에 사 여러 개를 기다리는 WaitForMultipleObjects도 있음 #include #include #include void main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); TCHAR szBuffer[MAX_PATH + _MAX_FNAME] = {L"notepad.exe"}; // S..
2024.01.03
no image
[System] 윈도우 프로세스 생성
System Programming OS의 자체 기능을 추가 제작하는 프로그래밍 OS를 활용하는 프로그래밍 Process 생성 CreateProcessW(), CreateProcessA() W는 유니코드, A는 아스키코드 윈도우는 유니코드를 사용하기 때문에 CreateProcess()는 W를 의미 A도 결국 유니코드로 변환해서 사용 #include #include #include void main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); TCHAR szBuffer[MAX_PATH + _MAX_FNAME] = {L"notepa..
2024.01.03
no image
[C] 함수
Call by value : 인자가 값인 함수 Call by reference : 인자가 포인터인 함수 함수 설계 원칙 인수의 유효성 검사는 피호출자 함수에서 구현 호출자가 검사를 하게 되면 호출마다 검사 로직을 구현해야 함 -> 피호출자 함수에서 구현하면 한번만 구현하면 됨 UI와 기능은 구별 팩토리얼 구할 때 main 함수와 factorial 함수가 있다면, main에서 입력값(문자열 출력: 숫자를 입력하세요) 받아서 factorial 함수에 전달 factorial 함수는 유효성을 검사하고 수행한 값을 반환 main에서는 유효성 검사 시 잘못된 값에 대한 오류 출력 또는 수행된 값을 출력 중복되는 코드는 함수화 -> DRY(do not repeat yourself) 원칙 ※ 실용주의 프로그래머
2024.01.03
no image
[C] 배열
바이트 순서 컴퓨터 메모리에 바이트가 저장되는 순서 상위, 하위 바이트 0x01234567 01이 상위 바이트, 67이 하위 바이트 빅 엔디안 낮은 주소에 상위 바이트 네트워크가 빅 엔디안 사용 리틀 엔디안 낮은 주소에 하위 바이트 윈도가 리틀 엔디안 사용 배열 ※ 참조자&은 c++ 문법 Lookup Table if, switch 문은 선택지가 늘어날수록 코드도 길어지고 성능 저하도 일어남 이를 lookup table을 사용하면 하나의 인덱스를 기준으로 수행하기 때문에 아무리 선택지가 늘어도 성능 저하가 일어나지 않음 다차원 배열 char aList[3][7] = { "Hello", "World", "String" }; char (*paList)[7] = aList; -> paList는 포인터 변수이고,..
2024.01.02
no image
[C++] C와 C++ 차이
과거에는 메모리 사용을 잘못하면 플랫폼에 문제가 발생 -> 이를 해결하기 위해 링 시스템(유저모드와 커널모드)과 가상메모리가 등장 -> 유저모드 단계에서 문제가 생겨도 플랫폼에 영향이 가지 않음C : 사용자가 스스로 물건을 잘 써야함C++ : 사용자의 이해도가 상대적으로 부족해도 되지만 물건을 잘 만들어야 함비용 : C 성능 : C > C++유지보수 : C > C++입출력std는 namespace, ::은 범위 지정 연산자,  cout은 출력을 담당하는 객체(cin은 입력), cout객체에게 출력을 맡김char name[10];std::cout > name;자료형long long : 64비트 정수char16_t : 16비트 문자char32_t : 32비트 문자auto : 컴파일러가 초깃값의 형식에 맞춰 ..
2023.12.28
no image
[Network] 기초 이론
Internet : Router와 DNS의 거대한 집합체 Host : Internet에 연결된 컴퓨터 Endpoint : Network 이용주체 ex) Peer, Server, Client Switch : Network 자체 ex) Router, F/W, IPS -> 스위칭하는 주체에 따라 L2, L3, L4로 구분 MAC : 하드웨어에 대한 식별자 IP : Host에 대한 식별자 IPv4 : 주소 길이 32bits IPv6 : 주소 길이 128bits Subnet Mask : Network ID 길이를 나타냄 ex) 255.255.255.0 -> 24 Port : Process(User)/Service(Kernel)/Interface(H/W)에 대한 식별자(16bits) ※ Service : 네트워크에..
2023.12.26
no image
[C] 표준 입출력 도구
입출력은 kernel이 수행 파일은 입출력 Buffer가 존재 Win7 이상부터 ASLR(Address Space Layout Randomization)을 지원 -> 실행할때마다 메모리 주소를 바꿔서 해킹 방지 Debugging F9 : breakpoint 설정 F5 : 디버그 모드로 실행 Alt + 6 : 메모리 창 확인 F11 : 한줄씩 실행
2023.12.26