C lseek() 파일의 임의의 위치로 읽기·쓰기 포인터 이동 함수
파일의 읽기/쓰기 위치를 파일의 처음 위치로 초기화합니다. 파일의 위치는 기준 옵션에 따라 앞으로 또는 뒤로 읽기/쓰기 위치로 건너 띕니다.
- 헤더: stdio.h
- 형태: off_t lseek(int fildes, off_t offset, int whence)
- 인수: int fildes 파일 디스크립트
off_t offset 이동할 바이트 수
int whence 시작 시점 - 반환: off_t 변경된 읽기/쓰기 포인터
파일의 읽기/쓰기 위치를 파일의 처음 위치로 초기화합니다.
파일의 위치는 기준 옵션에 따라 앞으로 또는 뒤로 읽기/쓰기 위치로 건너 띕니다.
건너 띈다는 말씀은 인수로 받은 숫자의 위치로 이동한다는 뜻이 아니라 건너 띄듯이 count 한다는 뜻입니다. 아래의 그림을 참고하여 주십시오.
whence | 설명 |
SEEK_SET | 파일의 시작 |
SEEK_CUR | 현재 읽기/쓰기 포인터 위치 |
SEEK_END | 파일의 끝 |
C언어 lseek() 함수 예제
#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;
}
C언어 lseek() 예제 실행 결과
test.bin 파일에 a부터 f까지 입력되어 있을 때 실행 결과입니다.
]$ ./a.out
abcdef
abcdef
cdef
file size = 17
]$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 실행 시 긴 이름의 옵션 사용 함수 getopt_long() (0) | 2020.03.16 |
---|---|
C언어 도메인 이름으로 hostent 정보 구하기 함수 gethostbyname() (0) | 2020.03.16 |
C언어 호스트 이름 구하기 함수 gethostname() (0) | 2020.03.16 |