โ ์คํธ๋ฆผ
์คํธ๋ฆผ์ ํ๋์ ํ๋ฆ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์๋๊ผญ์ง๋ฅผ ํ์ด๋๊ณ ๋ค๋ชจ๋ ํธ์ค๋ฅผ ๋ผ์ฐ๋ฉด ๋ฌผ์ด ๋ค๋ชจ ๋ชจ์์ผ๋ก ๋์ค๊ณ , ๋๊ทธ๋ ํธ์ค๋ฅผ ๋ผ์ฐ๋ฉด ๋๊ทธ๋๊ฒ ๋์จ๋ค. ์ด์์ฒด์ ๊ฐ ๋ฌผ์ ๊ณต๊ธํ๋ ์์ฒ์ด๊ณ ์คํธ๋ฆผ์ ํธ์ค๋ค. ์ถ๋ ฅ ๋ฐฉํฅ์ ํ๋ฉด(๋ชจ๋ํฐ)์ผ๋ก ์ ํ๋ฉด ํ๋ฉด์ ์ถ๋ ฅ๋๊ณ , ํ์ผ๋ก ์ ํ๋ฉด ํ์ผ์ ์ถ๋ ฅ(์ฐ๊ธฐ)๋๋ค. ์ ๋ ฅ ๋ํ ์ ๋ ฅ ์ฅ์น(ํค๋ณด๋)๋ก ํ ์๋ ์๊ณ ํ์ผ์ ํตํด ์ฝ์ ์๋ ์์ผ๋ฉฐ ํ์ดํ(ํน์ ๋ช ๋ น์ ๊ฒฐ๊ณผ)๊ฐ ๋ ์๋ ์๋ค. ์ ๋์ค ์ด์์ฒด์ ์ ๋ฐ์ ํ C/C++์ ์ ์ถ๋ ฅ์ ๋ฐ์ด ์คํธ๋ฆผ์ผ๋ก ํด์ํ๊ธฐ ๋๋ฌธ์ ์คํธ๋ฆผ์ ๋ํ ์ดํด๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์์ํ๋ค.
โ ํ์ค ์คํธ๋ฆผ
ํ์ค ์คํธ๋ฆผ์๋ stdin, stdout, stderr ์ธ ๊ฐ์ง๊ฐ ์๋ค. ๊ฐ๊ฐ 0(stdin), 1(stdout), 2(stderr)์ fd(File Descriptor, ํ์ผ์์ ์) ๊ฐ์ ๊ฐ๊ณ ์๋ค. ์ฌ๊ธฐ์ integer๊ฐ์ ํ์ผ์์ ์๊ฐ ๋์ค๋๋ฐ, ๋ง์ฝ ํ์ผ ์ ์ถ๋ ฅ์ด๋ผ๋ฉด ํ์ผ ๊ณ ์ ์ ๊ฐ(ํ์ผ์ ์คํํ๋ฉด ๊ณ ์ ์ ๊ฐ์ ๋ฐํ)์ ํตํด์ ํ์ผ์ ์ ๊ทผํ๊ณ , ํ์ค ์คํธ๋ฆผ์ ๊ฐ์ ํตํด์ ํ๋ฉด์ ์ ์ถ๋ ฅ ํ ์ ์๋ค. ์ํค๋ฐฑ๊ณผ์ ๋ฐ๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
ํ์ค ์คํธ๋ฆผ(standard streams)์ ํน์ ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ธํฐํ์ด์ค๋ฟ ์๋๋ผ ์ ๋์ค ๋ฐ ์ ๋์ค ๊ณ์ด ์ด์ ์ฒด์ (์ด๋ ์ ๋๊น์ง๋ ์๋์ฐ์๋ ํด๋นํจ)์์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ๊ณผ ๊ทธ ํ๊ฒฝ(์ผ๋ฐ์ ์ผ๋ก ๋จ๋ง๊ธฐ) ์ฌ์ด์ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐ๋ ์ ์ถ๋ ฅ ํต๋ก๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๋ณดํต ํ์ค ์คํธ๋ฆผ์ด๋ผ๊ณ ํ๋ฉด ํค๋ณด๋์ ๋ชจ๋ํฐ์ ๊ธฐ๋ณธ ์ ์ถ๋ ฅ์ ์๊ฐํ๋ฉด ๋๋ค.
โ ํ์ผ ์ ์ถ๋ ฅ
#include "stdio.h"
int main()
{
printf("Hello \n");
fprintf(stdout, "Hello \n");
FILE* fp = fopen("abc.txt", "w");
fprintf(fp, "My name is Seoarang \n");
fclose(fp);
}
// ์ถ๋ ฅ ๊ฒฐ๊ณผ
// Hello
// Hello
Unix ์ ์ถ๋ ฅ์ ์ญ์ฌ๋ฅผ ๋๋ผ๊ธฐ(?) ์ํด c ์ฝ๋๋ก ์์ฑํ๋ค.
printf๋ ํ์ค์ถ๋ ฅ ์ ์ฉ ํจ์์ด๋ค. ๋ณ๋ค๋ฅธ ์ธ์ ์์ด ๋ฌธ์์ด๋ง ์ธ์๋ก ์ ๋ฌํ๋ฉด ํ๋ฉด์ ์ ๋ฌ๋๋ค. ํ์ค์ ๋ ฅ ์ ์ฉ ํจ์๋ scanf๋ค. C++์์๋ cin๊ณผ cout์ด ํด๋นํ๋ค.
fprintf๋ File print์ด๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ก ํ์ผ ์์ ์๊ฐ ์์นํ๊ณ ๋ ๋ฒ์งธ ์ธ์๋ก ๋ฌธ์์ด์ด ๋ค์ด๊ฐ๋ค. ์์ ์์, fprintf์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก stdout์ ๋ฃ์ผ๋ฉด printf์ ๊ฐ์ด ํ์ค์ถ๋ ฅ์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒซ ๋ฒ์งธ ์ธ์๋ก fopen์ ๊ฒฐ๊ณผ ๊ฐ์ธ ํ์ผ ์์ ์๋ฅผ ๋ฃ์ผ๋ฉด ํ์ผ์ ์ฐ์ฌ์ง๋ค. abc.txt์๋ "My name is Seoarang"์ด ์ฐ์ฌ์ง๋ค.
๋ฐ๋๋ก ํ์ผ ์ ๋ ฅ์ fscanf์ด๋ค.
์ด์ฒ๋ผ ํ์ผ ์ ์ถ๋ ฅ๊ณผ ๊ด๋ จ๋ ์์คํ ํจ์๋ fget, fput, fread, fwrite, fscanf, fprintf์ด ์๋ค. ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ง ์กฐ๊ธ์ฉ ์ฐจ์ด๊ฐ ์์ง๋ง ๋ชจ๋ ํ์ผ ์ ์ถ๋ ฅ์ ์ง์ํ๋ ํจ์๋ค.
#include <stdio.h> // C++ ์ ๊ฒฝ์ฐ <cstdio>
int fgetc(FILE* stream); // ํ๊ธ์ ์ถ๋ ฅ
int fputc(int character, FILE* stream); // ํ๊ธ์ ์
๋ ฅ
char* fgets(char* str, int num, FILE* stream); // ๋ฌธ์์ด ์ถ๋ ฅ
int fputs(const char* str, FILE* stream); // ๋ฌธ์์ด ์
๋ ฅ
size_t fread(void* ptr, size_t size, size_t count, FILE* stream); // ๋ฒํผ ๋งํผ ๋ฌธ์์ด ์ถ๋ ฅ
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream); // ๋ฒํผ ๋งํผ ๋ฌธ์์ด ์
๋ ฅ
int fprintf(FILE *stream, const char *format, ...); // ํฌ๋งท ๋ฌธ์์ด ์ถ๋ ฅ
int fscanf(FILE *stream, cont char *format, ...); // ํฌ๋งท ๋ฌธ์์ด ์
๋ ฅ
๐งจํ์ผ ์ด๊ธฐ ์ต์ ๊ณผ ํ์ผ ์ ์ถ๋ ฅ ํ์ฉ ์์
fopen์ ํ์ผ ์ด๊ธฐ ์ต์ ์๋ "r+", "w+", "a", "a+" ์ ๊ฐ์ด ์ฝ๊ธฐ/์ฐ๊ธฐ/์ฝ๊ธฐ์ฐ๊ธฐ ๋ฑ ๋ค์ํ ๋ชจ๋๊ฐ ์๋ค. ์๋ ํ๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํด๋ณด์.
fopen ํ์๋ fclose๋ฅผ ๋ฐ๋์ ํ๋ ๊ฒ์ด ์ข๋ค. ํ์ผ ์์ ์๋ฅผ ์ ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด๋ UI์์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์ ์์ ๋ฅผ ๋ณด์.
#include "stdio.h"
#include "unistd.h"
...
bool constructSymbolMap(const std::string& path)
{
char str[2048];
memset(str, 0, sizeof(str));
FILE *fd = fopen((path + "/" + STR_SYMBOL_MARKET_CSV).c_str(), "r");
if (fd > 0)
{
symbolMarketMap.clear();
while (fgets(str, 2048, fd))
{
char *line = str;
char *pch = strsep(&line, ",");
if (*pch == '\0')
{
printSeperateError(counter, idx++);
continue;
}
symbol_id = atoi(pch);
pch = strsep(&line, ",");
if (*pch == '\0')
{
printSeperateError(counter, idx++);
continue;
}
strncpy(exchange_name, pch, 32);
}
}
else
{
printf("Cannot read %s file", path.c_str());
return false;
}
return true;
}
ํ์ผ์ fopen์ ํตํด ์ด๊ณ , fgets๋ก ํ์ค์ฉ ํ์ผ์ ๋ด์ฉ์ ๋ฐ๋ณตํด์ ๊ฐ์ ธ์จ๋ค. ๊ฐ์ ธ์จ ๋ด์ฉ์ strsep์ด๋ผ๋ ๋ฌธ์์ด ๊ตฌ๋ถ์(",")๋ก ์๋ฅด๋ ํจ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ณ์์ ๋์ ํ๊ณ ์๋ค. ์ฆ, csv(comma seperate value) ํ์ผ์ ํ์ฑํ๋ ํจ์๋ฅผ ํํํ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ ์ ํํ ๋์ด ์๋ ํ์ผ์ ํ๋ก๊ทธ๋จ์์ ์ฝ์ด์ ํ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ทผ ๋ง๋ค. ํ์ผ์ ์ฐ๋ ๊ฒฝ์ฐ๋ ๊ฐ๋ ์์ง๋ง ์ฝ์ด์ ์๋ฏธ์๋ ๋ฐ์ดํฐ๋ก ํ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ ๋ง๋ค. ๋ฐ๋ผ์ ์ ์์ ์ฒ๋ผ ํ์ผ ์ ์ถ๋ ฅ๊ณผ ๋ฌธ์์ด ์ฒ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ฐ์ตํด๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๊ตณ์ด C++์ด ์๋๋๋ผ๋ ์๋ฐ๋ ํ์ด์ฌ์ผ๋ก๋ ํ ๋ฒ์ฏค์ ์ฐ์ตํด๋ณด๊ธธ ๋ฐ๋๋ค.
C++์ fstream, ifstream, ofstream์ ์คํธ๋ฆผ ํจ์๋ ๋ค์ ๊ฐ์์์ ์ดํด๋ณด๊ฒ ๋ค.
'ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > C++ ๊ธฐ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] 14. ์ฐธ์กฐ์(Reference) (0) | 2023.06.02 |
---|---|
[C++] 13-2. ๊ธฐ๋ณธ์ ์ถ๋ ฅ๊ณผ ํ์ผ์ ์ถ๋ ฅ(feat. iostream, ifstream, ofstream, stringstream) (0) | 2023.05.19 |
[C++] 12. ๋ฌธ์์ด(feat. ์ง๋ ฌํ) (0) | 2023.05.06 |
[C++] 11. ํจ์(feat. ์ ์ญํจ์, ๋ฉค๋ฒํจ์, ์ ์ ํจ์, ๋๋คํจ์) (0) | 2023.04.28 |
[C/C++] 10. ํฌ์ธํฐ(feat. ์ค๋งํธ ํฌ์ธํฐ) (0) | 2023.04.26 |
๋๊ธ