몽상실현개발주의

[따배씨] 13.5 바이너리 파일 입출력 본문

Language/C

[따배씨] 13.5 바이너리 파일 입출력

migrationArc 2021. 6. 18. 17:48

[따배씨] 13.5 바이너리 파일 입출력

따배씨 - 따라하며 배우는 C언어

13강 파일 입출력

13.5 바이너리 파일 입출력

#include <stdio.h>
#include <stdlib.h>

int main(void){
    /*
        fopen() mode tring for binary IO
        - "rb, "wb", "ab"
        - "ab+", "a+b"
        - "wb+", "w+b"
        - "ab+" , "a+b"
     
        C11 'x' mode fails if the file exists, insteda of overwriting it.
        - "wx", "wbx", "wb+x", "w+bx"
     */
    
    // FILE Writing
    {
        FILE* fp = fopen("binary_file", "wb");
        
        double d = 1.0 / 3.0;
        int n = 123;
        int* parr = (int*)malloc(sizeof(int) * n);
        if (!parr) exit(1);
        for (int n = 0; n < 123; ++n)
            *(parr+n) = n * 2;
        
        fwrite(&d, sizeof(d), 1, fp);
        fwrite(&n, sizeof(n), 1, fp);
        fwrite(parr, sizeof(int), n, fp);
        
        fclose(fp);
        free(parr);
        
        // Total size is 8 * 1 + 4 * 1 + 123 * 4 = 504byte
    }
    
    // FILE Reading, feof(), ferror()
    {
        FILE* fp = fopen("binary_file", "rb");
        double d;
        int n = 0;
        
        fread(&d, sizeof(d), 1, fp);
        fread(&n, sizeof(n), 1, fp);
        
        int* parr = (int*)malloc(sizeof(int)*n);
        if (!parr) exit(1);
        
        fread(parr, sizeof(int), n, fp);
        
        printf("feof = %n", feof(fp));
      	// feof = 0
        
        printf("%f\n", d);
      	// 0.333333
        printf("%d\n", n);
      	// 123
        
        for (int i = 0; i < n; i++)
            printf("%d ", *(parr+i));
        printf("\n");
      	// 0 2 4 6 8 10 12 14 16 18 20 22 24 26...
      	// ...240 242 244 
        
        printf("feof = %d\n", feof(fp));
				// feof = 0      
        
        fread(&n, sizeof(n), 1, fp);   // read one more toward EOF
        
        printf("feof = %d\n", feof(fp));  // return snon-zero at EOF
      	// feof = 1
      
        printf("ferror = %d\n", ferror(fp));  // return 0 : ok
      	// ferror = 0
        
        fwrite(&n, sizeof(n), 1, fp);   // try writing to make an error
        
        printf("ferror = %d\n", ferror(fp)); // 0 is ok, non-zero otherwise
      	// ferror = 1
        
        fclose(fp);
    }
    return 0;
}

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

Comments