C 언어에서 파일을 처음부터 다시 읽거나 중간으로 건너뛰려면 lseek()로 현재 파일 위치를 옮긴다.
작게 실행해 보기
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/uio.h>
int main(void) {
FILE *fp = tmpfile();
if (!fp)
return 1;
if (fputs("abcdef", fp) == EOF || fflush(fp) == EOF) {
fclose(fp);
return 1;
}
int fd = fileno(fp);
if (fd < 0) {
fclose(fp);
return 1;
}
off_t next = lseek(fd, 2, SEEK_SET);
if (next < 0) {
fclose(fp);
return 1;
}
printf("position=%lld\n", (long long)next);
if (fclose(fp) == EOF)
return 1;
return 0;
}시작점 기준 바이트 위치 2로 이동한다. 정규 파일이 아닌 소켓이나 파이프에는 같은 탐색이 적용되지 않는다.
반환값과 주의점
성공하면 이동한 새 위치를 바이트 단위로 반환한다. 실패는 (off_t)-1이다.
SEEK_SET은 시작점, SEEK_CUR는 현재 위치, SEEK_END는 파일 끝 기준이다. 파이프나 소켓처럼 탐색이 안 되는 대상도 있다.
예제 실행 방법
gcc -std=c11 -Wall -Wextra example.c -lm -o example
./example
답글 달기