큰 파일(2GBytes 이상)을 다루고자 해야 하는 문제에 봉착하는 분들을 위해서 LFS를 참고자료로 다루었으면 좋겠습니다. LFS 참고링크 - [minzkn]
요약하면 컴파일 옵션에 "-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"을 주고 open/creat 함수에서 O_LARGEFILE을 사용하고 off_t 의 확장에 대한 고려등에 대해서 다루어졌으면 합니다.
오늘 집에가서 관련 내용을 살펴보고 테스트 후 문서를 업데이트 시키도록 하겠습니다. 재미있을 것 같군요 :-) 좋은 정보 감사합니다. -[yundream]
Contents
lseek
사용법
설명
- SEEK_SET
파일의 처음을 기준으로 offset을 계산한다.- SEEK_CUR
파일의 현재 위치를 기준으로 offset을 계산한다.- SEEK_END
파일의 마지막을 기준으로 offset을 계산한다. 실수로 파일의 마지막을 초과해서 lseek를 사용했을 경우 lseek에서 리턴을 하지는 않지만 write()혹은 read()에서 에러를 발생하게 되므로 주의 해야 한다.반환값
에러
- EBADF
Fildes가 열린 파일 지정자가 아니다.- ESPIPE
Fildes가 파이프, 소켓 혹은 FIFO이다.- EINVAL
Whence가 유효한 값이 아니다.예제
#include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <sys/stat.h> #include <sys/types.h> int main(int argc, char **argv) { int fd; int i, buf; fd = open("num.dat", O_RDWR|O_CREAT); if (fd < 0) { perror("error : "); exit(0); } for (i = 1000; i < 1010; i++) { write(fd, (void *)&i, sizeof(i)); } // 파일의 처음으로 이동한 다음 데이터를 읽는다. lseek(fd, 0, SEEK_SET); read(fd, (void *)&buf, sizeof(i)); printf("%d\n", buf); // 파일의 처음이로 이동한 다음 4번째 입력된 숫자를 // 읽는다. lseek(fd, 4*sizeof(i), SEEK_SET); read(fd, (void *)&buf, sizeof(i)); printf("%d\n", buf); }참고문헌
Recent Posts
Archive Posts
Tags