Fundamentals 4

알고리즘 공부에 대한 생각

아르바이트를 하다가 문득 든 생각이 있다. “나 알고리즘 공부 왜 하고있는거지?” 배경 처음 시작은 대학 동기가 백준을 추천해준것 부터였다. 그땐 C언어를 처음 배울때라 문법을 익히는데 도움이 되겠지 하고 풀었고, C++를 접할쯤엔 STL을 활용해보는데 의미를 두고 풀었던것 같다. 그냥 간단한 문제들만 풀어본게 전부라서 복잡한 문제를 풀어본적은 없었다. 군대에서 상병을 달았을 때 쯤 심심해서 본격적으로 시작해본 PS는 생각보다 더 어렵고 심오한 문제들이 득실득실했다. 그때쯤 solved.ac이라는 서비스도 생겨서 레이팅을 올리는 재미로 변태알고리즘 몇개를 공부해서 플레티넘까지 티어를 올린것에 나름 만족하고 있던 때이었다. 지금은 플레티넘4 1800점대의 점수를 갖고 있는데(지금 확인해보니 1844점이다)..

[UNIX] I/O multiplexing: select()함수를 이용한 방법

입출력 함수를 통한 프로그램을 작성해본 경험이 있다면 아래와 같은 형태의 코드를 본 적이 있을 것입니다. 파일/콘솔 등에서 사용자의 입력을 받고 그에 대한 적절한 처리를 통해 출력을 수행하는 프로그램의 일부입니다. (예제에서는 입력받은 값을 그대로 출력합니다.) while((str_len = read(fd_in, buf, BUF_SIZE) > 0) { write(fd_out, buf, str_len); } 위와 같은 구조의 I/O를 blocking I/O라고 합니다. 입력이 수행되는 동안은 출력을 할 수 없고, 출력이 수행되는 동안에는 입력을 수행할 수 없습니다. 따라서 많은 수의 파일/소켓 등에 I/O를 동시에 수행해야 하는 경우에는 적절한 구조가 아닙니다. 몇 가지 해결방안 입력과 출력이 동시에 수행..

Fundamentals/UNIX 2020.03.18

[SOCKET] TCP소켓의 연결과 연결종료

TCP는 두 호스트 간의 유니캐스트(unicast) 연결 지향(connection-oriented) 프로토콜입니다. 따라서, 두 호스트가 데이터를 보내기 전에 상호 간의 연결을 해 주어야 합니다. TCP의 연결을 수행하기 위해서 각 호스트의 IP주소, Port번호로 구성된 4-tuple 데이터가 필요하며, 각각의 IP-PORT쌍은 TCP 소켓을 구성하는데 활용됩니다. TCP Connection Overview TCP를 사용한 통신은 설정, 데이터 전송, 연결 종료 3개의 단계를 거쳐서 수행됩니다. TCP/IP Illustrated에서 표현한 TCP Connection Diagram은 아래와 같습니다. 우선 해당 다이어그램에 대해서 알아보도록 하죠. 연결을 요청하고 연결 종료를 요청하게 될 주체를 Clie..

Fundamentals/SOCKET 2020.03.11

[SOCKET] sockaddr 구조체 - sockaddr

sockaddr구조체는 소켓의 주소에 대한 정보를 담는 구조체입니다. 해당 구조체를 사용해 bind(), connect(), sendto()등의 함수에 소켓의 주소에 대한 정보를 전달할 수 있는 것이죠. sockaddr구조체의 원형 sockaddr의 원형은 socket.h에 아래와 같이 정의되어 있습니다. /* Structure describing a generic socket address. */ struct sockaddr { __SOCKADDR_COMMON (sa_);/* Common data: address family and length. */ char sa_data[14];/* Address data. */ }; 매크로 함수 __SOCKADDR_COMMON의 원형은 sockaddr.h에 아래와..

Fundamentals/SOCKET 2020.03.06