본문 바로가기

Programming/C/C++

C/고수준 파일 입출력/버퍼 기반 입출력 함수

반응형
버퍼 기반 입출력
 - 버퍼 기반 입출력 함수 : fread(3)

  • 항목의 크기가 size인 데이터를 nitems에 지정한 갯수만큼 읽어  ptr에 저장
  • 성공하면 읽어온 항목 수를 리턴
  • 읽을 항목이 없으면 0을 리턴
- 버퍼 기반 출력함수 : fwrite(3)
  • 항목의 크기가 size인 데이터를 items에서 지정한 개수만큼 ptr에서 읽어서 stream으로 지정한 파일에 출력
  • 성공하면 출력한 항목의 수를 리턴
  • 오류가 발생하면 EOF를 리턴

버퍼 기반 입출력 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdlib.h>
#include <stdio.h>
 
int main(void) {
    FILE *rfp;
    char buf[BUFSIZ];
    int n;
 
    if ((rfp = fopen("unix.txt""r")) == NULL) {
        perror("fopen : unix.txt");
        exit(1);
    }
 
    while ((n = fread(buf, sizeof(char* 23, rfp)) > 0) {
        buf[6= '\0';
        printf("n=%d, buf=%s\n", n, buf);
    }
 
    fclose(rfp);
 
    return 0;
}
  • printf()는 저수준 출력
  • fwrite가 존재 --> 고수준 출력

printf() -> fwrite() (고수준 출력으로 바꾼 예시)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdlib.h>
#include <stdio.h>
 
int main(void) {
    FILE *rfp, *wfp;
    char buf[BUFSIZ];
    int n;
 
    if ((rfp = fopen("unix.txt""r")) == NULL) {
        perror("fopen : unix.txt");
        exit(1);
    }
 
    if ((wfp = fopen("unix.out""w")) == NULL) {
        perror("fopen : unix.out");
        exit(1);
    }
 
    while((n = fread(buf, sizeof(char)*23, rfp)) > 0) {
        fwrite(buf, sizeof(char)*2, n, wfp);
    }
 
    fclose(rfp);
    fclose(wfp);
 
 
    return 0;
}



반응형