[C]파일입출력 함수(2)[fread, fwrite]
이 포스트는 fread함수 fwrite함수에 관한 내용입니다.
4️⃣ fread함수
- size바이트짜리 데이터를 총 count개수만큼 읽어서 buffer에 저장합니다.
EOF
를 만나면 읽기를 멈춥니다.
< 함수원형 >
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
< 함수사용 >
#include <stdio.h>
#define BUFFER (1024)
int main(void)
{
FILE *stream;
int word_count;
char result[BUFFER] = { 0, };
stream = fopen("test.txt", "r"); //test.txt를 읽기형식으로 오픈
word_count = fread(result, sizeof(char), BUFFER, stream);
printf("readword: %d\n", word_count);
printf("%s\n", result);
fclose(stream);
}
/*---test.txt내용---*/
12345
67
89
/*---출력---*/
readword: 11
12345
67
89
- 위의 코드에서처럼
"r"
mode로 읽었을 경우 fread함수의 반환값으로 11이 나왔습니다. 반면"rb"
mode로 읽었을 경우 반환값이 나왔습니다.(윈도우Vscode기준) - 즉 윈도우환경에서 바이너리(이진)모드로 읽을 경우
'\r'
까지 읽어들임을 알 수 있었고 text작성에서 줄바꿈시'\r\n'
형식으로 작성됨을 알 수 있었습니다. - 위에 코드에서는
sizeof(char)
의 형식으로 size값을 넣어줬습니다. 하지만기본 데이터형의 크기는 시스템마다 달라질 수 있습니다
. 이러한 이유로 엉뚱한 데이터가 읽힐 수도 있습니다.(4바이트 int로 생각했지만 2바이트씩 읽히는등…)
그렇기 때문에 정확히 파일에 저장할 데이터 크기를 고정해 두는게 좋습니다.sizeof(char)
보다는1
로 작성하는 것이 더 안전할 것 입니다.
5️⃣ fwrite함수
< 함수원형 >
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);
- buffer에서 size바이트짜리 데이터를 총 count개수만큼 읽어서 파일에 작성합니다.
< 함수사용 >
#include <stdio.h>
#define BUFFER (20)
int main(void)
{
FILE *stream;
int word_count;
char result[BUFFER] = "hello\n";
stream = fopen("test.txt", "w"); //test.txt를 읽기형식으로 오픈
word_count = fwrite(result, sizeof(char), BUFFER, stream);
printf("writeword: %d\n", word_count);
fclose(stream);
}
/*---출력---*/
writeword: 20
/*---test.txt에 쓰인내용---*/
hello
@@@@@@@@@@@@@@ //14개의 쓰래기문자가 채워짐 @로 단순하게 표현
- EOF를 만나면 읽기를 멈췄던
fread함수
와 달리fwrite함수
는 20개(2번째인자 x 3번째인자)만큼 파일에 작성했습니다.정확한 BUFFER의 크기를 넣어줘야합니다 fread함수
의 경우와 마찬가지로 두번째인자인size
의 값을 고정된 값으로 넣는 것이 좋습니다.sizeof(char)
보다는1
로 작성하는 것이 더 안전할 것 입니다.