몽상실현개발주의

[따배씨] 13.6 파일 임의 접근 본문

카테고리 없음

[따배씨] 13.6 파일 임의 접근

migrationArc 2021. 6. 18. 17:50

[따배씨] 13.6 파일 임의 접근

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

13강 파일 입출력

13.6 파일 임의 접근 Random Access

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

/*
    ABCDEF ...
    Currnet position 0 and read -> A
    Current position 1 and read -> B
 */

int main(void){
    int ch;
    long cur;
    
    FILE* fp = fopen("text.txt", "r");
    
    cur = ftell(fp);
    printf("ftell() = %ld\n", cur);
    // ftell() = 0
    
    fseek(fp, 2L, SEEK_SET);
    
    cur = ftell(fp);
    printf("ftell() = %ld\n", cur);
    // ftell() = 2
    
    ch = fgetc(fp);
    printf("%d %c\n", ch, ch);
    // 67 C
    
    cur = ftell(fp);
    printf("ftell() = %ld\n", cur);
    // ftell() = 3
    
    fseek(fp, -2L, SEEK_CUR);
    cur = ftell(fp);
    printf("ftell() = %ld\n", cur);
    // ftell() = 1
    
    ch = fgetc(fp);
    printf("%d %c\n", ch, ch);
    // 66 B
    
    /* SEEK_END */
    
    fseek(fp, 0L, SEEK_END);
    
    ch = fgetc(fp);
    printf("%d %c\n", ch, ch);
    // -1 \377
    
    fseek(fp, -1L, SEEK_END);
    ch = fgetc(fp);
    printf("%d %c\n", ch, ch);
    // 90 Z
    
    fseek(fp, -2L, SEEK_END);
    ch = fgetc(fp);
    printf("%d %c\n", ch, ch);
    // 89 Y
    
    
    
    /* fsetpos(), fgetpos() */
    // 파일이 큰 경우의 이동법
    
    fpos_t pt; // long long type
    pt = 10;
    fsetpos(fp, &pt);
    
    
    ch = fgetc(fp); // return 0 ok
    printf("%d %c \n", ch, ch);
    // 75 K
    
    fgetpos(fp, &pt);
    printf("%lld\n", pt);
    // 11

    return 0;
}
ftell()
  • 현재 위치 출력, 시작점으로 부터 떨어진 byte 읽기
  • 읽은 후 1byte 이동

 

fseek(fp, 2L, SEEK_SET);
  • fseek(file point, 이동할 byte, 이동 기준점) 이동
  • SEEK_SET : 시작점
  • SEEK_END : 끝 점

 

fpos_t pt; // long long type
fsetpos(fp, &pt); // fseek()
fgetpos(fp, &pt);	// ftell()
  • 파일의 크기가 큰 경우 사용

 

 

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

/*
    ABCDEF ...
    Currnet position 0 and read -> A
    Current position 1 and read -> B
 */

int main(void){
    {
        FILE* fp = fopen("binary", "wb");
        for (int i = 0; i < 100; ++i)
        {
            double d = i * 1.11;
            fwrite(&d, sizeof(double), 1, fp);
        }
        fclose(fp);
    }
    
    // read
    
    FILE * fp = fopen("binary", "rb");
    long cur;
    double d;
    
    cur = ftell(fp);
    printf("Before reading %ld\n", cur);
    // Before reading 0
    
    fread(&d, sizeof(double), 1, fp);
    
    cur = ftell(fp);
    printf("After reading %ld\n", cur);
    // After reading 8
    
    printf("%f\n", d);
    // 0.000000
    fread(&d, sizeof(double), 1, fp);
    printf("%f\n", d);
    // 1.110000
    
    cur = ftell(fp);
    printf("After reading %ld\n", cur);
    // After reading 16
    
    fseek(fp, 32L, SEEK_SET);   // 32 = 4 * 8
    fread(&d, sizeof(double), 1, fp);
    printf("%f\n", d);
    // 4.440000
    
    fclose(fp);
    
    
    return 0;
}
  • Binary 임의 접근

 

 


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

http://blog.naver.com/atelierjpro

 

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

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

blog.naver.com

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

 

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

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

www.inflearn.com

 

Comments