๐ C๋ C++ (15) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ Boost๋ก ์๊ฐ ๊ฐ ์ฌ์ฉํด๋ณด๊ธฐ Boost๋ก ์๊ฐ ๊ฐ ์ฌ์ฉํด๋ณด๊ธฐ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด, ๋ก๊ทธ๋ผ๋๊ฐ HTTP ์์ฒญ์ ๋ฐ์์ ๋๋ผ๋๊ฐ ํ์ฌ ์๊ฐ์ ์ ๋ณด๋ฅผ ๋จ๊ธธ ๋๊ฐ ์ข ์ข ์์ต๋๋ค. ์ ๋ C์ธ์ด์์๋ ์๋์ ๊ฐ์ด ํ์ฌ ์๊ฐ์ ๋จ๊ธฐ๊ณ ์์ต๋๋ค long get_current_msec(void) { long cur_msec = 0; struct timeval tv_time; gettimeofday(&tv_time, 0); cur_msec = (long)(tv_time.tv_sec*1000) + (long)(tv_time.tv_usec/1000); return cur_msec; } Boost์์๋ ์๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ญ์ ์กด์ฌํฉ๋๋ค (๋ฌผ๋ก ์ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ C++ ์ฝ๋์ ์ ์ฉํด๋ ๊ด์ฐฎ์ต๋๋ค ๐ ) Boost์ Posix Time ์๊ฐ๊ธ์๋ ์.. Boost::program_options ์ฌ์ฉ๊ธฐ ์ค๋์ ์์นจ๋ถํฐ ์ผ์ด ์ ๋์ง ์๋๋ค ๋จธ๋ฆฌ๊ฐ ์ ์ ๋์๊ฐ์ ๋ง๋งํ ๋๋ ใ .,ใ ๊ทธ๋์~~ ๊ธฐ๋ถ ์ ํ ์ฉ์ผ๋ก ๊ธ ํ๋ ์๋ฐํ๊ฒ ์ฌ๋ฆฌ๊ณ ๋ค์ ์ด์ผ ํด๋ณด๊ฒ ๋ค ์ด์ ์ ์์ฑํ boost ๊ด๋ จ ๊ธ์๋ ์ผ๋ค์ํผ ๋๋ boost์ ๋ง์ ๊ณ ๋ง์์ ๋๋๋ค +_+ ์ฅ ์ด๊ฒ ์๋ค๊ณ ? ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง๊ธฐ ๋๋ฌธ ์ด๋ฒ์ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์์ฑํ ๊ฒ ์์ด์ C๋ก ํ๋ ค๋ค๊ฐ C++๋ก ํ๋ ค๋๋ฐ ์ธ์์.. Boost์๋ program options๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ argument ๊ธฐ๋ฅ์ ์ฐธ ์ฝ๊ฒ ๋ง๋ค ์ ์๊ฒ ํด ๋์๋ค 1. ๊ธด ์๋ก ์ฐ๋ฆฌ๊ฐ ์ด๋ค ํ๋ก๊ทธ๋จ์ ์คํํ ๋, ์ต์ ์ ์ถ๊ฐํ์ฌ ์คํ์ ํด๋ณธ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค argument๋ฅผ ํ๋ก์ธ์ค ์คํ ํ์ผ ๋ค์ ์ถ๊ฐํด์ ์ฌ์ฉํ๊ณค ํ๋๋ฐ $ gcc --help Usage: gcc [opt.. ์ ์ฒ๋ฆฌ๊ธฐ(preprocessor)์ ๋งคํฌ๋ก(macro) C/C++์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด์ define์ผ๋ก ์์๋ ๋ฌธ์์ด์ ์ ์ํด๋ณธ ์ ์ด ํ ๋ฒ์ฏค์ ์์ ๊ฒ์ด๋ค #include #define MAX_SIZE 1024 #define MAIN_NAME "test main" using namespace std; int main(void) { cout Error ํด๊ฒฐ: boost::shared_ptr<boost::asio::io_context>::operator* boost thread๋ฅผ ํ์ฉํ์ฌ io_context_pool์ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ ์ค.. core๊ฐ ๋ฌ๋ค ์ด์ ๋๋์ง๋ ์์.. ์ฐธ๊ณ ํ ThreadPool ์์๋ ์๋์ ์ฒจ๋ถ ๋งํฌ๋ก ์ฌ๋ ค๋๊ฒ ๋ค CMD> ./process ... /usr/include/boost/smart_ptr/shared_ptr.hpp:728: typename boost::detail::sp_derr::operator*() const [with T = boost::asio::io_context; typename boost::deta_context&]: Assertion `px != 0' failed. Aborted (core dumped) ๊ทธ๋ฌ๋ค ๋น์ทํ ์๋ฌ๋ฅผ ๊ฐ์ง stack overflow ๊ธ์ ๋ณด์๋๋ฐ ๋ด์ฉ์ ์ด๋ฌํ๋ค ์ผ๋จ ์์ธ์,.. STRUCT์ UNION์ ์์๋ณด์ STUCT(๊ตฌ์กฐ์ฒด)์ UNION(๊ณต์ฉ์ฒด)์ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์์ผ๋ก ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ๋ค ์ ์ ๋ฐฉ๋ฒ๋ ๋น์ทํ๊ณ ์ฌ์ฉ ์ด์ ๋ ๊ฐ์ง๋ง, ๋์ ์ฐจ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฌ ๋ฐฉ์์ด๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ์์ด๊ธธ๋ ๋ค๋ฅธ์ง์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํด ๊ฐ๋จํ ์ ๋ฆฌํ๊ฒ ๋ค ** ๋ฉ๋ชจ๋ฆฌ ๋ฌถ์ ํ์ ** C - STRUCT์ UNION ์ ๊ณต C++ - Class, STRUCT, UNION ์ ๊ณต 1. STRUCT์ UNION ์ฌ์ฉ ๋ฐฉ๋ฒ (1) STRUCT (๊ตฌ์กฐ์ฒด) ์ฌ์ฉ struct๋ผ๋ ๋จ์ด์ ์์ํดํ ํ์๋ ์๋ค int, charํ ๋ฑ์ ๋ฐ์ดํฐ ํ๊ณผ ๊ฒฐ๊ตญ์๋ ๊ฐ๋ค ใ ใ STRUCT์ ํน์ง - ๋ฐ์ดํฐ๋ฅผ ๋ค์ฑ๋กญ๊ฒ ํํํ ์ ์๋ค - ๋ฐ์ดํฐํ์ ์ญํ ์ด๋ค - ๊ตฌ์กฐ์ฒด ์ด๋ฆ ์ง์ ๋๋ C ๋ช ๋ช ๊ท์น ์ฌ์ฉํ๋ฉด ์ข๋ค - ๊ตฌ์กฐ์ฒด ํ์ฅ ๊ฐ๋ → Class (C++์์).. C++ ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์์๋ณด์ - (2) shared_ptr ์ค๋์ ์ค๋งํธ ํฌ์ธํฐ ์ค... ๋ ๋ฒ์งธ์ธ shared_ptr์ ๋ํด์ ์์๋ณผ๊ฑฐ๋ค ์์ฆ ๋ค์ด๋ฒ ๋ธ์ฑ ์ด๋ฒคํธ๋ฅผ ํ๊ณ ์๋๋ฐ ๊ฐ์ด๋ฐ ์ ๋ ฌ๋ก ํ๋๊น ์ฌ์ง ์ฒจ๋ถํ๊ธฐ๊ฐ ๋๋ฌด ์ข์์ด์ ์ผ์ชฝ์ ๋ ฌํ์๋๋ฐ ๋ฐ๊ฟ ๋ณด๋ ค๊ณ ํ๋ค ^_^ ++ ์ด์ ๊ธ ์ฌ๋ฆฌ๊ณ ๋ค์ ๋ ์ฌ๋ฆด๋ ค๊ณ ํ๋๋ฐ ๋ค๋ฅธ๊ฑธ ๋จผ์ ์ฌ๋ ธ๋๋ ์ํ์ง ๋ป ํ๋ค 1. ์ค๋งํธ ํฌ์ธํฐ์๋ ๋ญ๊ฐ ์์ง? ์ค๋งํธ ํฌ์ธํฐ๋ 3๊ฐ์ง๊ฐ ์๋ค 1) unique_ptr 2) shared_ptr (์ค๋ํ ๊ฑฐ) 3) weak_ptr 1-1) unique_ptr์ด ๋ญ์๋๋ผ (๋งํฌ ์ฒจ๋ถ ^^) ์ฒซ ๋ฒ์งธ, unique_ptr์ ํฌ์ธํฐ๋ฅผ ํตํด Uniqueํ ์์ ๊ถ์ ๊ฐ์ง๊ณ unique_ptr ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ๋ ์ค๋งํธ ํฌ์ธํฐ์ด๋ค ๋ ๋ฒ์งธ, make_unique() ๋๋ new๋ฅผ ์ฌ.. Error ํด๊ฒฐ: undefined reference to `vtable for XXX' undefined reference to `vtable for XXX' collect2: error: ld returned 1 exit status ... ์ด๋ ๊ฒ ์๋ฌ๊ฐ ๋์จ๋ค๋ฉด ์๋ง vtable for {ํด๋์ค ๋ช } ์ด๋ฐ ์๋ฌ๊ฐ ๋์ค๊ฒ ๋ ํ ๋ฐ ๊ตฌํํ๋ ค๋ ํด๋์ค์ ํน์ virtual ํจ์๋ฅผ ๋ช ์ํ๊ณ ์ ์์คํ์ผ์์ ๊ตฌํ์ ์ํ๋์ง ํ์ธํ๋๋ก ๋๋, ๋ถ๋ชจ ํด๋์ค์์ virtual ๋ช ์ํด๋๊ฒ ์๋๋ฐ ์์ํ๋ค๊ฐ ์ฌ์ฉ ์ํ๋์ง ํ์ธ Boost-echo tcp client & server๋ฅผ ์ดํด๋ณด์ (1) Boost๋ C++์ ํ๋ค๋ณด๋ฉด ์ธ์ ๊ฐ ๋ฐ๋์ ๊ผญ ์ฌ์ฉํ๊ฒ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค Boost์ ๋ํ ์ค๋ช ์ ์๋์ ์ฒจ๋ถํ Boost ๊ณต์ํํ์ด์ง์์ ํ๋ฒ ์ฝ์ด๋ณด๋๊ฑธ ์ถ์ฒํ๋ค (์ฌ๋ฐ์) ์ฒ์์ boost๋ฅผ ์ฌ์ฉํ ๋๋, STL(Standard Template Library)์ด๋ ์ญํ ์ด ๊ฐ์ ๊ฒ ๊ฐ์๋ฐ, ์ ์ฐ์ง? ํ๋๋ฐ STL์ ํ์ฉํด์ ๋ญ๊ฐ ์ข๋ ํด์ผํ ๋, boost์๋ ์ด๋ฏธ ์๋ ๊ธฐ๋ฅ์ด ๋ง์ด ์์๋ค ์์ ํ์ฉํด์ ์ฐ๋ค๋ณด๋ฉด ๊ธ๋ฐฉ ์ต์ํด์ง ์ ์๋น ์๋ก ์ด ๊ธธ์๋๋ฐ, Boost ํ์ฉ์ ์ข ๋ ์ํด๋ณด๊ธฐ ์ํด์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํ ์ฝ๋๋ฅผ ํ๋ฒ์ฉ ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค ์ค์ ํ์ฉํ ๋ ๋์น ๋ถ๋ถ ํ์ธ๋ ํ ๊ฒธใ Boost Asio์ ๋ํ ์ค๋ช ์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค ์ฒซ ๋ฒ์งธ๋ก ํ์ธํ ์์ ๋ Async TCP Server์ Cl.. ์ด์ 1 2 ๋ค์