함수 기능
오픈된 파일의 오프셋 위치를 명시적으로 변경하는 시스템 호출
함수 원형
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int filedes, off_t offset, int whence)
리턴 값 : 성공시 파일 오프셋, 에러시 -1
함수 파라메터
file des
lseek할 파일디스크립터
offset
파일 오프셋 위치
whence
SEEK_SET - 파일의 오프셋 위치를 처음으로
SEEK_CUR - 현재 오프셋 부터 계산
SEEK_END - 파일의 오프셋은 파일 마지막
함수 예제
lseek 1
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
int main(void){
char *fname = "ssu_test.txt";
off_t fsize;
int fd;
if((fd=open(fname,O_RDONLY))<0){
fprintf(stderr,"open error for %s\n",fname);
exit(1);
}
if((fsize = lseek(fd,0,SEEK_END))<0){
fprintf(stderr, "lseek error\n");
exit(1);
}
printf("The size of <%s> is %ld bytes.\n",fname,fsize);
exit(0);
}
lseek2
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#define CREAT_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
char buf1[] = "1234567890";
char buf2[] = "ABCDEFGHIJ";
int main(void){
char *fname = "ssu_hole.txt";
int fd;
if((fd = creat(fname,CREAT_MODE))<0){
fprintf(stderr, "creat error for %s\n",fname);
exit(1);
}
if(write(fd,buf1,12)!=12){
fprintf(stderr,"buf1 write error\n");
exit(1);
}
if(lseek(fd,15000,SEEK_SET)<0){
fprintf(stderr,"lseek error\n");
}
if(write(fd,buf2,12)!= 12){
fprintf(stderr, "buf2 write error\n");
exit(1);
}
exit(0);
}
함수 결과
lseek1
lseek2
리눅스시스템 프로그래밍 - 홍지만 저
교재 내에 있는 예제를 바탕으로 작성한 글 입니다.
'C & LINUX' 카테고리의 다른 글
C / LINUX ferror(3) feof(3) clearerr(3) (0) | 2022.05.01 |
---|---|
C / LINUX read() (0) | 2022.05.01 |
C / LINUX creat() (0) | 2022.05.01 |
C / LINUX fclose() fcloseall() (0) | 2022.05.01 |
C / LINUX fopen() freopen() fdopen() (0) | 2022.05.01 |