일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 취약점
- .net core 7
- LOB
- cbpf
- C언어
- BOF
- vtable
- 어셈블리어
- packet filter
- rfc5508
- epoll_wait
- wnourefresh
- NAPT
- ncurses
- .nret core 배포
- Compiler
- wrefresh
- epoll
- edge trigger
- ioctl
- DOCKER-USER
- doupdate
- mvwin
- REDIS
- 풀이
- level trigger
- packet flow
- Docker
- iptables
- architecture
- Today
- Total
목록Computer Science (129)
Tuuna Computer Science
epoll사용시 Edge-Trigger를 사용하려면 Socket은 Non-Blocking모드를 사용하는것을 권장 man페이지에 의하면 Edge-Trigger모드의 경우 알림이 한번 오기때문에 이때 해당 디스크립터를 처리해야하는데 블로킹될 수 있는 우려가 있음 https://stackoverflow.com/questions/26269448/why-is-non-blocking-sockets-recommended-in-epoll
우리가 흔히 사용하고 있는 NAT(Network Address Translator ) 또는 NAPT(Network Address Translator)의 기본적인 매커니즘음 "인터넷의 다른 부분에서 동일 집합의 IP주소를 재사용하는 것을 허용하는 것이다. " 차후 언급할 NAT는 NAT와 NAPT를 통용하는 말이다. 즉, NAT를 사용하면 IPv4의 주소 고갈문제를 임시적으로 해결할 수 있는 대비책이다. NAT로 구성되어 있는 하나의 네트워크는 하나의 Public IP를 부여받고 내부에 Private IP를 부여하는 식으로 하나의 IP로 다수의 호스트를 구성할 수 있음을 의미한다. 기본적인 동작과정으로는 20.20.20.20을 가진 Public IP를 Router겸을 하는 NAT에 부여되고 192.168...
ncurses를 사용하다보면 창을 수정하고 실제 터미널로 출력하기를 원할 때 refresh(), wrefresh(WINDOW* win)을 사용하는 경우가 많다. 그렇다면 새로고침할 때 사용하는 wrefresh()함수는 내부적으로 어떻게 이루어져 있을까 코드를 보면 wrefresh()함수는 내부적으로 wnourefresh()함수를 호출하고 doupdate()함수를 호출한다. wnourefresh()함수는 수정한 내용을 가상터미널로 출력하는 역할을 지닌 함수이고 doupdate()함수는 가상터미널에 있는 출력문을 실제 터미널로 비교 출력하는 역할을 지닌다. 즉, wrefresh()함수는 wnourefresh()->doupdate()함수의 반복적 사용이라고 볼 수 있다. 하지만 터미널 사이의 출력은 꽤나 큰 ..
Ncurses 내에서 윈도우를 옮겨야 할때 mvwin()이라는 함수가 존재한다. 일반적인 window를 mvwin()하면 해당 윈도우의 _begy와 _begx에 인자로 주어진 by와 bx를 대입하고 touchwin()으로 윈도우 자체를 새로 그린다음 wrefresh()를 호출하면 된다. 하지만 subwindow의 경우 말이 많이 달라진다. 코드로 살펴보자 위는 ncurses내의 mvwin()을 하는 코드이다. mvwin()함수 내부를 보면 해당 인자로 주어진 win이 subwin 플래그가 있는지 확인한다. 없을 시 바로 위에서 언급한대로 옮기기를 시도한다. 하지만 _SUBWIN 플래그가 존재할 시 특별한 루틴을 타는데 바로 dupwin()함수를 통해 기존의 win을 복제한 다음 기존의 win의 내용을 지..
Edge Trigger vs Level Trigger 예전에 공부할땐 이 둘이 뭔 차이인지도 몰랐고 어떤 상황에서 쓰이는가에 대한 생각조차 하지 않았지만 최근 채팅 서버를 epoll과 thread를 사용해서 구현하는 과정에서 클라이언트의 EPOLLIN 이벤트에 맞서서 큐에 넣고 thread가 처리하기를 원했다. 하지만 thread에 값을 넣고 thread가 처리하기 까지 계속해서 EVENT통지를 해서 문제가 생겼다. 이게 바로 Level Trigger이다. 즉, 데이터가(이벤트가)존재한다면 계속해서 알림을 보내는것이다. 이것에 반하여 Edge Trigger는 이벤트가 발생하는(EPOLLIN)즉시에만 알림을 보내고 그 뒤로는 보내지 않는다. 이로서 차근차근 thread를통해 즉시가 아닌 준비작업을 마치고 ..
C++ Async Logging Logging을 해보자! 일반적인 소프트웨어 경우 Logging은 필수다. 그렇기 어떻게 Logging을 할 수 있고 어떤식으로 Logging을 구현하는 것이 효율적인것인가에 대해 알아볼것이다. Logging의 중요성 : 인터넷에 검색해보면 자세히 나온다. 일반적인 IO의 문제점 Logging을 하기위해 가장 많이 쓰이면서 간단한 방법은 Synchronous하게 IO를 작동시키는것이다. 즉, 코드실행중간에 Logging 코드를 실행하여 File에 Write또는 Read하는 것이다. 아래 코드를 살펴보자 #include #include class Logging{ private: std::ofstream file; void writeFile(std::string msg){ f..
2020 공개SW 개발자대회 결과 보고서를 옮겨놓은 것을 의미합니다. 제작 완성기간 2020.08.20 해당 프로젝트는 냉장고 속 흔히 볼 수 있는 식재료를 어플의 카메라로 찍어 해당 식재료들을 이미지 인식(딥러닝 + 머신러닝)을 통해 식재료를 파악하고 이를 바탕으로 레시피를 추천해주는 프로젝트이다. 예를 들어 재료가 사과와 마늘이라면 이를 어플로 찍어 서버로 전송하면 이미지속의 사과와 마늘을 인식하고 이 재료들로 만들 수 있는 요리의 레시피를 제공한다. 화면 은 어플리케이션을 실행하면 보이는 초기화면이다. 해당 화면의 아래 카메라 버튼을 누르면 스마트폰의 카메라가 활성화된다. 활성화된 카메라로 식재료를 촬영하면 된다. 화면 은 활성화된 카메라로 식재료를 찍었을 시 나타나는 화면이다. 아래 카메라 버튼을..
BFS 방식 하나의 Start NonTerminal Symbol에서 한번의 유도과정을 거치고 token stream과 일치할 시 종료 그렇지 않으면 유도된 과정을 worklist에 추가하고 제일 앞을 꺼냄. 예시를 보자 grammr이 아래와 같이 있을 때 E→T E→T+E T→int T→(E) worklist → E 를 먼저 넣는다. 그리고 E를 꺼내온다. Start Symbol E는 T와 T+E로 유도가 가능하다. 이를 worklist에 넣는다. worklist→T→T+E 그리고 T를 꺼낸다. T는 int와 (E)로 유도가 가능하다. 이를 worklist에 넣는다. worklist → T+E → int → (E) T+E를 꺼낸다. T+E는 int+E, (E)+E, T+T, T+T+E로 유도가 가능하다...
[해결] 수정 계획 : 아래 grammar 실패작 곧 정상적인 grammar 들고올 예정 기존 마크다운은 #, ##, ###와 >, >>, >>> 등등의 grammar을 제공한다. 이번에는 이러한 grammar을 제쳐두고 새로운 grammar을 제시할 생각이다. #,##,###와 같은 Header은 H1->{"문자열"}, H2->{"문자열"}로 변경할 것이고 >, >>와 같은 Quote는 Quote->{"인용구"}로 Link와 Image는 Link->{"이름","링크 주소", "툴팁"}의 형태로 제공될 예정이다. 아래는 grammar에 대한 CFG이다. mddoc : paragraphs opt_terms ; paragraphs : /* None */ | paragraph | paragraphs terms..
Onoin Web framework는 C로 이루어진 Web framework이다. 경량 framework로서 django 느낌의 냄새를 풍귄다. 본론부터 들어가서 사용법과 간단한 후기에 대해서 서술할 예정이다. Github 주소 https://github.com/davidmoreno/onion 위의 주소가 Onion github 주소이다. README.md에 적힌대로 Install을 해주면 된다. 그리고 해당 폴더에 들어가서 example을 보면서 사용법 습득이 가능하다. 주의) 자료가 github, api docs밖에(?)없어서 노가다 중요 API DOCS : https://coralbits.com/static/onion/ Usage 서버 초기 세팅법은 아래 코드로 이루어진다. 간단하다. int mai..