본문 바로가기

C언어/시스템 소프트웨어

[시스템 소프트웨어/C언어] lseek, 파일 오프셋 변경 (파일 작업 위치 변경)

728x90
반응형

lseek()

 

lseek() 함수는 파일의 current file offset (현재 파일의 작업 위치)를 변경하는 역할을 한다.

 

lseek()는 <unistd.h>에 정의되어 있으며 시그니처는 아래 코드와 같다.

 

off_t lseek(int fd, off_t offset, int whence);

 

fd는 변경할 파일의 디스크립터, offset은 움직일 오프셋의 크기, whence는 기준점이 되는 오프셋을 의미한다.

 

 

whence에 들어갈 수 있는 값들은 아래와 같으며 이는 <fcntl.h>에 정의되어 있다.

 

#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2

 

SEEK_SET으로 설정하면 기준이 파일의 처음, 즉 파일 오프셋은 0으로 설정된다.

SEEK_CUR로 설정하면 기준이 현재 작업 중인 위치, 즉 현재 파일 오프셋으로 설정된다.

SEEK_END로 설정하면 기준이 파일의 마지막으로 설정된다.

 

따라서 아래 코드처럼 사용하는 것이 가능하다.

 

    off_t new_offset = lseek(fd, -10, SEEK_END);
    if (new_offset == -1) {
        exit(-1); // 에러 발생
    }

 

위 코드는 파일의 끝에서 10칸 위치로 파일 오프셋을 수정하겠다는 의미이다.

 

lseek()는 동작에 성공하면 수정된 offset을 반환하며 실패하였을 경우 -1을 반환한다.

 

 

 

* off_t 자료형은 <sys/types.h>에 정의되어 있다.

 

 

 

 

728x90
반응형