190711 파일입출력, 클라->서버 (파일저장) 본 글은 교육을 받으며 정리한 내용을 그대로 올린 것 입니다. ● File IO 개행을 표시할 때 \r : 캐리지 리턴(CR) (다시 앞으로 땡기는 작업) \n : 라인 피드(LF) (타자기계에서 위로 올리는 작업) 파일 저장시 위 두개를 모두 해야한다. \r\n으로 저장을 해야한다. ABC BCD = ABC\r\nBCD\r\n 으로 저장이되어 모두 10byte로 저장된다. 1.텍스트모드 텍스트 모드는 자동으로 위(\r\n)을 변환시켜준다. 즉 \n과 \r\n의 관계다. 로그파일 만들 때 많이 쓴다. 2.바이너리모드 데이터를 저장할 목적으로 사용된다. 주로사용. 읽어온 만큼 다시 그대로 저장하려면 바이너리모드를 쓴다. ● 파일 IO를 하는 이유 2가지 1..
190710 - Study - 비동기 Notificaion IO 모델 본 글은 교육을 받으며 노트필기한 내용을 그대로 올린것 입니다. 비동기 Notification IO 모델 구현 방법 2가지 1. WSAAsyncSelect() 사용 : 발생한 이벤트를 수신한 위도우의 핸들 지정 필요. 2. WSAEventSelect() 사용 : ● WSAEventSelect : 임의의 소켓을 대상으로 이벤트 발생여부를 관찰하도록 한다. 이벤트 발생 유무에 관계없이 바로 반환한다. int WSAAPI WSAEventSelect( SOCKET s, WSAEVENT hEventObject, long lNetworkEvents ); ● manual-reset 모드이면서 non-signaled 상태인 Event 오브젝트가 필요..
190710 본 글은 교육을 받으면 노트필기 했던 내용을 그대로 올린내용입니다. #include // 윈도우즈 헤더보다 앞서서 정의한 것이 많다. 주의. 가장 (windows.h)위에 작성 // Windows.h 에서 이전 버전의 winsock.h 을 포함 시키기 떄문에 충돌이 난다. #include #include int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) return -1; WSACleanup(); return 0; } 다이얼로그 베이스 기반 #include #incl..
190709 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 다중 처리 에코 서버를 구현해보자. 대기 소켓 스레드 1개, 통신 소켓 스레드 2개 (수신, 발신)가 필요하다. 이때 대기 소켓 스레드는 프라이머리 스레드가 수행하도록 하고 통신 소켓 스레드는 서브 스레드가 처리하도록 구현할 것이다. peer : 통신에 참여하는 엔드시스템 getpeername(sock, (SOCKADDR*)& clientaddr, &addrLen); getpeername() : 원격 IP, 포트번호 얻기 getsockanme() : 로컬 IP, 포트번호 얻기 SOCKADDR : 옛날꺼 SOCKADDR_IN 데이터의 경계 만들기 1. markup : 끝나면 #(표식)을 붙여줌, EOR(End of record) ..
190708-1 1일차 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. TCP/IP 프로토콜로 윈도우즈에서 제공하는 네트워크 프로그래밍 방식을 공부한다. Windows Socket : 현재 비동기, 넌 블로킹을 위한 2.2가 주력. ● 네트워크는 end system이라고 부르는 컴퓨터 또는 하드웨어가 2개 이상 연결되어 있는 것을 말한다. 컴퓨터 사이에 통신가능하도록 2개이상의 장치가 연결된 것이다. ● 프로로토콜 : end system과 (라우터간 등)통신을 위한 약속 ● 컴터는 모두 1대 1로 연결되있다. 기본적으로는 1대 1만 통신이 가능하다. 네트워크가 1대 1로 맞물려 이는 것을 로컬 네트워크라고한다. ● 출발위치 목적지를 실어서 데이터를 보낸다. ● 라우터, 게이트웨이 ● OS..
190705-4 - _DLLPRE extern "C" __declspec(dllexport), __declspec(dllexport) void Print(int a, int b) 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 라이브러리 다이나믹 링크 라이브러리(DLL) : 실행시간에 결정 스테틱 링크 라이브러리(LIB) : 빌드 A.c B.c (텍스트 레벨) 컴파일 작업 : A.obj , B.obj (바이너리 레벨) 링크 작업 EXE 생성. (.lib 가 포함) -> 동일한 라이브러리를 포함해서 사용하는 문제가 있을 수 있다. DLL 이라는 개념을 만들어낸다. 우선은 static lib 부터 해보자. 라이브러리 : 컴파일완료된 바이너리 데이터 (함수 등의 집합이다.) 라이브러리 제공자 ..
190705-3 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 가상메모리 가상메모리 함수 사용 #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; HWND hWndMain; LPCTSTR lpszClass=TEXT("BigMemory"); int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow) { 기본 코드 생략 } #define MEGA 1048576 PBYTE stptr=NULL; TCHAR Status[256]="할당되지 않았습니다"; void FreeRecords() { ..
190705-2 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. https://v0nsch3lling.tistory.com/426 new 는 기본적으로 동기화가 되어있다. 전용 힙의 장점 한꺼번에 할당하고 제거할 수 있다. 동기화가 필요없다. (내 쓰레드 에서만 사용한다. 속도가 빠르다.) #include #include using namespace std; template class List { private: struct Node { T data; Node*next; Node*prev; public: Node(T d):data(d),prev(0),next(0){} }; private: HANDLE hHeap; // 힙의 핸들 bool bDefaultHeap; // 기본힙 or 사용자힙..
190705-1 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. 메일슬롯예제를 했습니다. WriteFilre, ReadFile() 등을 IO함수라고 한다. 일반적으로 IO함수의 동작을 설명한다. OS에는 일반적으로 버퍼가 있다. 또 다른 OS의 또 다른 APP이 있을 때. IO함수는 모두 동일하게 동작한다. IO함수의 일은 바로 이렇다. APP 버퍼에 쓰는 동작이다. OS레벨에서 만들어 놓은 Write Buffer에 쓰게됩니다. 즉 APP레벨의 버퍼에서 OS레벨의 버퍼에 데이터를 나르는 작업을 말합니다. 여기서 버퍼란 임시적으로 사용되는 메모리이며 속도 향상을 위해 사용되는 것은 캐쉬라고 합니다. 일반적인 조회 작업에서 특정 데이터를 많이 조회할 경우에 카운팅을 하여 캐쉬라는 변수에 저장..
190704-3 파이프 교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다. IPC - 파이프 단방향 파이프 양방향 파이프 이름있는 파이프 : 이름으로 언제든지 커널오브젝트 핸들을 얻을 수 있다. 이름없는 파이프 지금 실습은 양방향, 이름있는 파이프 Client : 요청 Server : 응답 우리 예제는 이름있는 양방향 파이프 이면서 서버와 클라이언트 개념이 존재한다. (멀티 파이프) 파이프 서버가 mp라고 알려주면 클라이언트가 파이프를 만들어 달라고 요청한다. -> 파이프가 만들어지고 파이프의 한쪽을 핸들로 클라이언트가 갖는다. 서버쪽도 파이프의 한쪽의 핸들은 서버가 갖는다. 라고 생각하자. -> 클라이언트에서 먼저 발송 -> 서버가 받는다. -> 다시 클라이언트에 전송 다시. 클라이언트2번..