파일의 일부분만 mmap 을 이용하여 저장하고 싶습니다.
글쓴이: assasasa / 작성시간: 금, 2003/05/30 - 4:03오후
안녕하세요~
lseek 함수를 이용하여, 시작위치(start_offset)를 찾았습니다.
이 start_offset 을 mmap 을 이용하여, memory 내에 복사한 다음에
파일로 저장하려고 합니다.
코드는 다음과 같은데, 출력된 파일은 크기가 0 입니다.
즉, mmap 에서 return 되는 src의 크기가 0 입니다.
특정한 위치(start_offset) 로 부터 seg_size(bytes) 만큼 저장 하고 싶은데,
잘안됩니다.
조언을 부탁드립니다.
if( (fd_outfile = open(store_outfile, O_WRONLY | O_CREAT,0644))<0 ) { perror("open:outfile"); exit(EXIT_FAILURE); } start_offset = lseek(fd_infile, seg_size , SEEK_SET ); src = (char *) mmap(0, seg_size, PROT_READ, MAP_SHARED, fd_infile,start_offset ); write(fd_outfile, src, seg_size); munmap(src, seg_size);
Forums:
[quote] offset should ordinarily b
mmap manpage 내용중에 위와 같은 말이 있더군요.
혹시 실행시키면 write에서 오류나지 않나요? 제가 offset을 아무렇게나 주고 비슷하게 테스트 해보니 write에서 EFAULT 오류가 나더군요.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
mmap 의 offset 은 ...
mmap 의 offset 은 ... system 의 page size 의 배수가 되어야 하네요.
에서 start_offset 을 lseek 처럼 제 마음대로 파일내로 정할수는 없네요.
getpagesize() 로 리턴되는 제 시스템의 값은 4096 이더라고요.
다른 방법을 써야할거같네요.
답변 감사 드립니다.
"마무리가 반이다" -- woox
댓글 달기