[리눅스 시스템 프로그래밍] 5.10 파일 스트림 작업 위치 변경 및 확인, fseek, ftell, rewind

 

파일 입출력 작업 중에 프로그램 방식으로 작업 위치를 변경하거나 확인할 수 있는 함수를 제공하고 있습니다. fseek 함수는 작업 위치를 변경할 때 사용하는 함수이며 ftell 함수는 현재 작업 위치를 확인하는 함수입니다. 또한 작업 위치를 시작 위치로 이동하는 rewind 함수를 제공하고 있어요.

#include <stdio.h >

long ftell(FILE *fp);

반환 값: 실패 시 -1, 성공 시 offset

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

반환 값: 성공 시 0

whence:

SEEK_SET – 시작 위치

SEEK_CUR – 현재 위치

SEEK_END – 끝 위치

void rewind(FILE *fp);

다음은 고정 길이의 회원 데이터 여러 개를 보관하고 있는 파일에서 원하는 순서를 입력받아 회원 정보를 조회하는 예제입니다.

FILE *fp= fopen(“memdata”,”r”);

fseek(fp, 0, SEEK_END);

int mcnt = ftell(fp)/sizeof(Member);

fseek함수로 SEEK_END에서 offset 0로 작업 위치를 설정하면 파일의 끝으로 이동합니다. 그리고 ftell 함수를 호출한 결과를 회원 구조체 크기로 나누면 파일에 몇 명의 회원 데이터가 파일에 있는지 확인할 수 있어요. 참고로 여기에서 반환한 ftell 함수의 반환 값이 파일의 크기입니다.

[그림 5.13] ex_fseek 실행 화면
[그림 5.13] ex_fseek 실행 화면