TCP Echo Server
# TCP Echo Server
> socket/bind/listen/accept๋ก ์์ฝ ์๋ฒ ๊ตฌํ
## ํ์ต ๋ชฉํ
- BSD ์์ผ API์ ํ๋ฆ์ ์์ฑํ๋ค
- ์์ฝ ์๋ฒ(๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋๋ ค๋ณด๋ด๋ ์๋ฒ...
#c
#c-lang
#advanced
Compiler Flags
# Compiler Flags
> -O0/-O2/-O3, -Wall, ์ธ๋ผ์ธ ํจ์, LTO
## ํ์ต ๋ชฉํ
- GCC ์ต์ ํ ๋ ๋ฒจ(-O0 ~ -O3)์ ์ฐจ์ด๋ฅผ ์ดํดํ๋ค
- ๊ฒฝ๊ณ ํ๋๊ทธ์ ๋๋ฒ๊ทธ ์ต์
์ ํ์ฉํ๋ค...
#c
#c-lang
#advanced
Cache Locality
# Cache Locality
> ์บ์ ํํธ/๋ฏธ์ค, ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํจํด ์ต์ ํ
## ํ์ต ๋ชฉํ
- CPU ์บ์์ ๋์ ์๋ฆฌ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ค
- ์บ์ ํํธ/๋ฏธ์ค๊ฐ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ํ์
ํ๋ค
- ๋ฉ๋ชจ๋ฆฌ ...
#c
#c-lang
#advanced
Profiling
# Profiling
> gprof / perf ์ฌ์ฉ๋ฒ, ๋ณ๋ชฉ ๊ตฌ๊ฐ ํ์ง
## ํ์ต ๋ชฉํ
- `gprof`์ `perf`๋ฅผ ์ฌ์ฉํด ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ๋ถ์ํ๋ค
- ๋ณ๋ชฉ ๊ตฌ๊ฐ์ ํ์งํ๊ณ ์ต์ ํ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ค
...
#c
#c-lang
#advanced
OOP in C
# OOP in C
> ๊ตฌ์กฐ์ฒด+ํจ์ ํฌ์ธํฐ๋ก ๊ฐ์ฒด์งํฅ ํ๋ด๋ด๊ธฐ
## ํ์ต ๋ชฉํ
- ๊ตฌ์กฐ์ฒด์ ํจ์ ํฌ์ธํฐ๋ก ํด๋์ค ๊ฐ๋
์ ๊ตฌํํ๋ค
- ์บก์ํ, ์์, ๋คํ์ฑ์ C๋ก ๋ชจ์ฌํ๋ ํจํด์ ์ตํ๋ค
## ๋ด์ฉ
### ...
#c
#c-lang
#advanced
Callback Pattern
# Callback Pattern
> ์ด๋ฒคํธ ํธ๋ค๋ฌ, ์ฝ๋ฐฑ ๋ฑ๋กยทํธ์ถ ๊ตฌ์กฐ ์ค๊ณ
## ํ์ต ๋ชฉํ
- ์ฝ๋ฐฑ ํจ์์ ๊ฐ๋
๊ณผ ๋ฑ๋กยทํธ์ถ ํ๋ฆ์ ์ดํดํ๋ค
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ์์คํ
์ ์ง์ ์ค๊ณํ๊ณ ๊ตฌํํ๋ค
- `voi...
#c
#c-lang
#advanced
State Machine
# State Machine
> ์ํ ํ
์ด๋ธ, enum+ํจ์ ํฌ์ธํฐ๋ก FSM ๊ตฌํ
## ํ์ต ๋ชฉํ
- ์ ํ ์ํ ๋จธ์ (FSM)์ ๊ฐ๋
๊ณผ ๊ตฌ์ฑ ์์๋ฅผ ์ดํดํ๋ค
- `enum`๊ณผ ํจ์ ํฌ์ธํฐ ํ
์ด๋ธ๋ก FSM์ ๊ตฌ...
#c
#c-lang
#advanced
Mini Shell
# Mini Shell
> fork/exec/wait์ผ๋ก ๋ช
๋ น์ด ํ์ฑยท์คํํ๋ ๋ฏธ๋ ์
## ํ์ต ๋ชฉํ
- ์ง๊ธ๊น์ง ๋ฐฐ์ด ํ๋ก์ธ์ค, ์์คํ
ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋
์ ์ข
ํฉ ์ ์ฉํ๋ค
- ์
๋ ฅ ํ์ฑ โ fork โ exe...
#c
#c-lang
#advanced
Process
# Process
> fork/exec/wait, ํ๋ก์ธ์ค ์์ฑยท์ข
๋ฃ ํ๋ฆ
## ํ์ต ๋ชฉํ
- `fork()`๋ก ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ค
- `exec()` ๊ณ์ด ํจ์๋ก ํ๋ก์ธ์ค ์ด๋ฏธ์ง๋ฅผ ๊ต์ฒด...
#c
#c-lang
#advanced
Signal
# Signal
> signal/sigaction, SIGINTยทSIGTERM ์ฒ๋ฆฌ
## ํ์ต ๋ชฉํ
- ์ ๋์ค ์๊ทธ๋์ ๊ฐ๋
๊ณผ ๋์ ๋ฐฉ์์ ์ดํดํ๋ค
- `signal()`๊ณผ `sigaction()`์ผ๋ก ํธ๋ค๋ฌ...
#c
#c-lang
#advanced