<ํดํน: ๊ณต๊ฒฉ์ ์์ > 4ํ์ฐจ ์คํฐ๋
<ํดํน: ๊ณต๊ฒฉ์ ์์ > ์ฑ ์ ๋ณด๊ณ ๊ณต๋ถํ ๋ด์ฉ์ ๋๋ค
X86 ํ๋ก์ธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
๊ตฌ์กฐ์ฒด(structs)
-> ์ฌ๋ฌ๊ฐ์ ๋ณ์๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ํ๋์ฒ๋ผ ๋ค๋ฃจ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ๊ตฌ์กฐ์ฒด๋ผ๋ ๊ฒ์ ์ฌ์ฉ
-> ๊ตฌ์กฐ์ฒด๊ฐ ์ ์๋ ํ์๋ ์ฌ์ฉํ ์ ์๋ ๋ณ์ ํ์ ์ด ๋๊ณ , ๊ตฌ์กฐ์ฒด ํ์ ์ผ๋ก ๋ณ์๋ ํฌ์ธํฐ ์ ์ธ์ด ๊ฐ๋ฅํด์ง
- struct ๊ตฌ์กฐ์ฒด์ด๋ฆ *ํฌ์ธํฐ์ด๋ฆ = malloc(sizeof(struct ๊ตฌ์กฐ์ฒด์ด๋ฆ));๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ์ ์ธ ๊ฐ๋ฅ
- ์๊ฐ ํจ์๋ฅผ ๋ค๋ฃฐ ๋ /usr/include/time.h์ ์ ์๋์ด ์๋ tm ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
tm ๊ตฌ์กฐ์ฒด์ ์ ์
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
}
์ด ๊ตฌ์กฐ์ฒด๊ฐ ์ ์๋ ํ์ struct tm์ ์ฌ์ฉํ ์ ์๋ ๋ณ์ ํ์ ์ด ๋๊ณ , tm ๊ตฌ์กฐ์ฒด ํ์ ์ผ๋ก ๋ณ์๋ ํฌ์ธํฐ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
struct tm current_time, *time_ptr;
time_ptr = ¤t_time; // time_ptr์ current _time ์ ์ฃผ์๋ก ์ค์
// ๊ตฌ์กฐ์ฒด์ ์์๋ฅผ ์ ๊ทผํ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ
hour = current_time.tm_hour; // ์ง์ ์ ๊ทผ
minute - time_ptr->tm_min; // ํฌ์ธํฐ๋ก ์ ๊ทผ
second = *((int *) time_ptr); // ํฌ์ธํฐ ์กฐ์์ผ๋ก ์ ๊ทผ
* ๋ง์ง๋ง ๋ฐฉ๋ฒ์ ์ฃผ๋ชฉ *
tm ๊ตฌ์กฐ์ฒด์์ ์ด๋ฅผ ์ป์ด์จ ๋ฐฉ๋ฒ์?
-> tm๊ตฌ์กฐ์ฒด์ ๋งจ ์์ tm_sec๊ฐ ์ ์๋์ด ์์ผ๋ฏ๋ก ๊ทธ ์ ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์๋ถ๋ถ์์ ์ฐพ์ ์ ์๋ค.
์ฆ, *((int *) time_ptr); ๋ฅผ ๋ณด๋ฉด time_ptr์ด tm ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ์์ ์ ์ ํฌ์ธํฐ๋ก ํ ๋ณํ์ด ๋๊ณ ์ด ํฌ์ธํฐ๊ฐ ๋๋ ํผ๋ฐ์ค ๋์ด ํฌ์ธํฐ ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํ๊ฒ ๋๋ค. tm ๊ตฌ์กฐ์ฒด์ ์ฃผ์๋ ๊ทธ ๊ตฌ์กฐ์ฒด์ ์ฒซ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก ์ด ๊ตฌ๋ฌธ์ ๊ตฌ์กฐ์ฒด์ tm_sec ์ ์ ๊ฐ์ ๋ปํ๋ค.
๋ํ tm ๊ตฌ์กฐ์ฒด์ ๊ฐ ์์๋ค์ด ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ๋ก ์ด์ํด ์์์ ํ์ธํ ์ ์๋ค.
์๋ฅผ ๋ค์ด time_ptr์ด ๊ฐ๋ฆฌํค๊ณ ์๋ ์ฃผ์๊ฐ 0xbffff7f0 ์ด๊ณ , ํ์ฌ ์๊ฐ์ด 04:22:24๋ผ๊ณ ํ ๋,
๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํธ๋
0xbffff7f0 -> 18 00 00 00 16 00 00 00 04 00 00 00 ...
์ด๋ฐ ์์ผ๋ก ๋ค์ด๊ฐ ์์!
์ฆ ๊ตฌ์กฐ์ฒด์ ์ ์๋์ด ์๋ ์์ผ๋ก 0x18(24) 0x16(22) 0x04(4) 4๋ฐ์ดํธ์ฉ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๊ณ ์ด๋ฅผ ํตํด ๊ตฌ์กฐ์ฒด ์์์ ์ ๊ทผํ๋ ๊ฒ์ด ๊ฐ๋ฅํจ์ ์ ์ ์์์