C언어 파일의 임의의 위치로 읽기·쓰기 포인터 이동 함수 lseek()

2020. 3. 16. 10:26 컴퓨터/프로그래밍

C함수 파일의 임의의 위치로 읽기·쓰기 포인터 이동 lseek()

파일의 읽기/쓰기 위치를 파일의 처음 위치로 초기화합니다. 파일의 위치는 기준 옵션에 따라 앞으로 또는 뒤로 읽기/쓰기 위치로 건너 띕니다.

  • 헤더: stdio.h
  • 형태: off_t lseek(int fildes, off_t offset, int whence)
  • 인수:int fildes 파일 디스크립트
    off_t offset 이동할 바이트 수
    int whence 시작 시점
  • 반환: off_t 변경된 읽기/쓰기 포인터
caution

파일의 읽기/쓰기 위치를 파일의 처음 위치로 초기화합니다.

파일의 위치는 기준 옵션에 따라 앞으로 또는 뒤로 읽기/쓰기 위치로 건너 띕니다.

건너 띈다는 말씀은 인수로 받은 숫자의 위치로 이동한다는 뜻이 아니라 건너 띄듯이 count 한다는 뜻입니다. 아래의 그림을 참고하여 주십시오.

whence 설명
SEEK_SET 파일의 시작
SEEK_CUR 현재 읽기/쓰기 포인터 위치
SEEK_END 파일의 끝
 
 

예제

#include <stdio.h>         // puts()
#include <string.h>        // strlen() memset()
#include <fcntl.h>         // O_WRONLY
#include <unistd.h>        // write(), close()

#define  BUFF_SIZE   1024

int main()
{
   int   fd;
   char  buff[BUFF_SIZE];
   off_t sz_file;

   fd = open( "test.txt", O_RDONLY);

   memset( buff, 0, BUFF_SIZE);
   lseek( fd, 10, SEEK_SET);              // 파일의 시작에서 10번을 건너 띈다.
   read( fd, buff, BUFF_SIZE);
   puts( buff);

   memset( buff, 0, BUFF_SIZE);
   lseek( fd,  5, SEEK_SET);              // 파일의 시작에서 5번을 건너 띈다.
   lseek( fd,  5, SEEK_CUR);              // 현재 위치에서 다시 5번을 건너 띈다.
   read( fd, buff, BUFF_SIZE);
   puts( buff);

   memset( buff, 0, BUFF_SIZE);
   lseek( fd,  -5, SEEK_END);             // 파일의 끝에서 앞으로 5번을 건너 띈다.
   read( fd, buff, BUFF_SIZE);
   puts( buff);

   sz_file  = lseek( fd,  0, SEEK_END);      // 파일의 끝 위치를 반환
   printf( "file size = %d\n", (int)sz_file);

   close( fd);

   return 0;
}

실행 결과

test.bin 파일에 a부터 f까지 입력되어 있을 때 실행 결과입니다.

]$ ./a.out
abcdef

abcdef

cdef

file size = 17
]$
이 댓글을 비밀 댓글로
error: Content is protected !!