Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- web
- Algospot
- C
- BASIC
- graph
- udemy
- BFS
- String
- 백준
- 따라하며 배우는 C언어
- 따배씨
- JavaScript
- C언어
- DP
- programmers
- BOJ
- Algorithm
- Cleancode
- 따라하면서 배우는 C언어
- Math
- sorting
- 종만북
- Python
- 생활코딩
- dfs
- greedy
- php
- 정수론
- 인프런
- server
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 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
http://www.inflearn.com/course/following-c
Comments