C,C++ & Linux

C/C++ fseek(3), fseeko(3)

KyooDong 2020. 5. 22. 11:23
728x90

함수 기능

파일 오프셋 포인터를 이동시키는 함수입니다.

파일을 읽거나 쓸 때 오프셋 포인터 위치에 작업이 일어납니다. 쉽게 생각해서 커서라고 

 

fseeko() 함수는 offset 을 off_t 타입으로 표현합니다. 이는 long 보다 큰 타입으로, long 형으로 오프셋을 표현할 수 없는 매우 큰 파일에 대해 사용합니다.

함수 원형

#include <stdio.h>

int fseek(FILE *fp, long offset, int whence);
int fseeko(FILE *fp, off_t offset, int whence);

 

매개변수

fp

대상 파일 포인터

 

offset

이동시킬 파일 오프셋

양수, 0, 음수 모두 가능합니다.

 

whence

기준점

SEEK_SET : 파일의 맨 처음

SEEK_CUR : 현재 파일 오프셋

SEEK_END : 파일의 맨 끝

반환값

성공 시 0 리턴

에러 시 0이 아닌 정수 리턴

예제

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


int main(int argc, char *argv[]) {
    char *fname = "ssu_test.txt";
    FILE *fp;
    long position;
    int character;

    if ((fp = fopen(fname, "r")) == NULL) {
        fprintf(stderr, "fopen error\n");
        exit(1);
    }

    printf("Input number >> ");
    scanf("%ld", &position);
    
    if (fseek(fp, position - 1, SEEK_SET)) {
        fprintf(stderr, "fseek error\n");
        exit(1);
    }

    character = getc(fp);
    printf("%ld번째 글자는 %c 입니다.\n", position, character);
    exit(0);
}

 

결과

 

 

 

 

 

 

 

 

 

 

리눅스시스템프로그래밍 저자 : 홍지만
https://book.naver.com/bookdb/book_detail.nhn?bid=14623672

책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)