본문 바로가기

Programming/C/C++

C/고수준 파일 입출력/파일 오프셋 지정 및 이동, 저장

반응형
파일 오프셋 지정
- 파일 오프셋 이동 : fseek(3)

  • stream이 가리키는 파일에서 offset에 지정한 크기만큼 오프셋을 이동
  • whence는 lseek과 같은 값을 사용
  • fseek은 성공하면 0을 실패하면 EOF를 리턴
- 현재 오프셋 구하기 : ftell(3)
  • 현재 오프셋을 리턴. 오프셋은 파일의 시작에서 현재 위치까지의 바이트 수
- 처음 위치로 오프셋 이동 ; rewind(3)
  • 오프셋을 파일의 시작 위치로 즉시 이동
- 오프셋의 저장과 이동 : fsetpos(3), fgetpos(3)
  • fgetpos: 파일의 현재 오프셋을 pos가 가리키는 영역에 저장
  • fsetpos : pos가 가리키는 위치로 파일 오프셋을 이동

fseek 함수 사용
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
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdlib.h>
#include <stdio.h>
 
int main(void) {
    FILE *fp;
    int n;
    long cur;
    char buf[BUFSIZ];
 
    if ((fp = fopen("unix.txt""r")) == NULL) {
        perror("fopen : unix.txt");
        exit(1);
    }
 
    cur = ftell(fp);
    printf("Offset cur= %d\n", (int)cur);
 
    n = fread(buf, sizeof(char), 4, fp);
    buf[n] = '\0';
    printf("-- Read Str=%s\n", buf);
 
    fseek(fp, 1, SEEK_CUR);
 
    cur = ftell(fp);
    printf("Offset cur=%d\n", (int)cur);
    n = fread(buf, sizeof(char), 6, fp);
    buf[n] = '\0';
    printf("-- Read Str=%s\n", buf);
 
    cur = 12;
    fsetpos(fp, &cur);
 
    fgetpos(fp, &cur);
    printf("Offset cur=%d\n", (int)cur);
 
    n = fread(buf, sizeof(char), 13, fp);
    buf[n] = '\0';
    printf("-- Read Str=%s\n", buf);
 
    fclose(fp);
 
    return 0;
}


반응형