14. [C / C++] ํ์ผ ์ ์ถ๋ ฅ
1. ํ์ผ๊ณผ ์คํธ๋ฆผ
์ ์ถ๋ ฅ ๋์์ด ์ฝ์์ผ ๋ ์ด์์ฒด์ ๊ฐ ์ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์๋ ์์ฑ ๋ฐ ์๋ฉธ์์ผ์ค๋ค.
(scanf, printf ๋ฑ๋ฑ)
์ ์ถ๋ ฅ ๋์์ด ํ์ผ์ด๋ผ๋ฉด, ์ฌ์ฉ์๊ฐ ์ด์์ฒด์ ์๊ฒ ์คํธ๋ฆผ ์์ฑ๊ณผ ์๋ฉธ์ ์์ฒญํด์ผ ํ๋ค.
(์คํธ๋ฆผ - ์ด์์ฒด์ ์ ์ํด์ ํ์ฑ๋๋ ์ํํธ์จ์ด์ ์ธ ์ํ)
2. ์คํธ๋ฆผ ํ์ฑ๊ณผ FILE ๊ตฌ์กฐ์ฒด
fopen_s(FILE** stream, const char* filename, const char* mode)
์คํธ๋ฆผ์ ํ์ฑํ ๋ ํธ์ถํ๋ ํจ์.
์ฒซ ๋ฒ์งธ ์ธ์ - ์คํธ๋ฆผ์ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํ FILE ๊ตฌ์กฐ์ฒด.
๋ ๋ฒ์งธ ์ธ์ - ์คํธ๋ฆผ์ ํ์ฑํ ํ์ผ์ ์ด๋ฆ.
์ธ ๋ฒ์งธ ์ธ์ - ํ์ฑํ ์คํธ๋ฆผ์ ์ข ๋ฅ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฌธ์์ด ํํ๋ก ์ ๋ฌ.
์ด ํจ์๋ ํด๋น ํ์ผ๊ณผ์ ์คํธ๋ฆผ์ ํ์ฑํ๊ณ ,
์คํธ๋ฆผ ์ ๋ณด๋ฅผ FILE๊ตฌ์กฐ์ฒด ๋ณ์์ ๋ด์์
๊ทธ ๋ณ์์ ์ฃผ์ ๊ฐ์ ๋ฐํํ๋ค.
( ํฌ์ธํฐ๋ฅผ ์ด์ฉํด์ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ํ์ผ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋๋ฏ๋ก,
FILE๊ตฌ์กฐ์ฒด๊ฐ ์ด๋ป๊ฒ ์ ์๋์ด์๋์ง๊น์ง๋ ์ ํ์๋ ์๋ค. )
3. ํ์ผ ์ถ๋ ฅ (์ ์ฅํ๊ธฐ)
ํ์ผ์ ์ ์ฅํ๊ธฐ ์ํ ํด๋๋ฅผ ์์ฑํ๋ค.
ํ์ผ ๊ฐ๋ฐฉ ๋ชจ๋
"'w" - ์ถ๋ ฅ.(๋ฎ์ด์ฐ๊ธฐ). ๋์ ํ์ผ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด ์๋ก ์์ฑ.
"a" - ์ถ๋ ฅ(์ด์ด ์ฐ๊ธฐ). ๋์ ํ์ผ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด ์๋ก ์์ฑ.
"r" - ์ ๋ ฅ. ๋์ ํ์ผ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ฌ.
t : ํ ์คํธ ๋ชจ๋. ์ฌ๋์ด ์๋ณ ๊ฐ๋ฅํ ํ์์ผ๋ก ์ ์ถ๋ ฅ.
b : ๋ฐ์ด๋๋ฆฌ ๋ชจ๋. ํ ์คํธ๋ก ํํํ ์ ์๋ ํ์์ ์ ์ถ๋ ฅ. (๋์์, ์ด๋ฏธ์ง, ์ฌ์ด๋)
"rb" - ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์ ๋ ฅ.
"wb" - ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์ถ๋ ฅ.
"rt" - ํ ์คํธ ํ์์ผ๋ก ์ ๋ ฅ. t ์๋ต ๊ฐ๋ฅ.
"wt" - ํ ์คํธ ํ์์ผ๋ก ์ถ๋ ฅ. t ์๋ต ๊ฐ๋ฅ.
fopen_sํจ์๋ ์คํธ๋ฆผ ์์ฑ์ ์ฑ๊ณต์ ํ๋ฉด 0์ ๋ฐํํ๋ค.
์ฐ๊ธฐ ๋ชจ๋์ ๊ฐ๋ฐฉ์ ์ฑ๊ณตํ๋ค๋ฉด, ํด๋น ํ์ผ ์คํธ๋ฆผ์ ์ ์ฅํ ๋ด์ฉ์ ์ ๋ ฅํด์ค๋ค.
์์ฑํ ์คํธ๋ฆผ์ ๋ฐ๋์ ์๋ฉธํด์ฃผ์ด์ผ ํ๋ค.
ํ์ผ์ ๋ซ์์ฃผ์ง ์์ผ๋ฉด ํ ๋น๋ ์ฑ๋ก ๋จ์์๊ฒ ๋์ด์, ๊ทธ๋งํผ ์์์์ค์ ์ด๋ํ๋ค.
fclose() ํจ์.
์ด์์ฒด์ ๊ฐ ํ ๋นํ ์์์ ๋ฐํ.
๋ฒํผ๋ง ๋์๋ ๋ฐ์ดํฐ์ ์ถ๋ ฅ.
๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ์ ์ฑ๊ณต์ ํ๋ค๋ฉด
๋ณ๋๋ก ๋ฉ๋ชจ์ฅ์ ํ์ผ ์์ฑํ์ง ์์๋
์๋์ผ๋ก ๋ฉ๋ชจ์ฅ ํ์ผ์ด ์์ฑ๋๊ณ , ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
4. ํ์ผ ์ ๋ ฅ (๋ถ๋ฌ์ค๊ธฐ)
๊ณผ์ฐ ํ์ผ์๋ null ๋ฌธ์๊ฐ ๊ธฐ๋ก๋์์๊น?
์ ์ฅํ ํ์ผ์ ์ฝ์ผ๋ฉด์ ํ์ธํด๋ณด์.
null ๋ฌธ์๋ ๊ธฐ๋ก๋์ง ์์ผ๋ฉฐ,
๋ฌดํ๋ฃจํ์ ๋น ์ ธ์ ์ฝ์ ์คํฌ๋กค์ด ๊ณ์ ๋ด๋ ค๊ฐ๋ค.
ํ์ผ์ ์ฝ์ด๋ค์ผ ๋๋ EOF๋ฅผ ํตํด์ ์กฐ๊ฑด์ ๊ฑธ๋๋ก ํด์ผ ํ๋ค.
fgets ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๊ฐํ ๋จ์๋ก ๋ฌธ์์ด์ ์ฝ์ด์ฌ ์ ์๋ค.