2014-01-15 2 views
2

나는이알려진 크기의 mmap을 사용하여 새 파일을 만들 수없는 이유는 무엇입니까?

size = 83456 
self.file = open("/tmp/installer.ipk", "r+b") 
self.mm = mmap.mmap(self.file.fileno(), size, access=mmap.ACCESS_WRITE) 

같은 메모리 매핑 된 파일을 만들려고하고 있지만 다음과 같은 예외

Traceback (most recent call last): 
    ... 
    File "./dept_sensor_service.py", line 70, in handle_control 
    self.mm = mmap.mmap(self.file.fileno(), size, access=mmap.ACCESS_WRITE) 
ValueError: mmap length is greater than file size 

나는이 프로그램을 실행하기 전에 파일 /tmp/installer.ipk이 존재하지 않습니다를 얻을. 스크립트에서 /tmp/installer.ipk이라는 파일을 만들고 83456 개의 0으로 채우기를 원합니다. mmap에 대한 파이썬 문서에 따르면 길이가 파일의 현재의 사이즈보다 큰 경우

, 파일이 나는 다양한 권한으로 주위를 해본 적이

길이 바이트를 포함하도록 확장되어, 하지만 그 파일에 대해 'r+b'이라고 생각하고 ACCESS_WRITE지도에 맞을 것입니다.

이것은 비글 본 Linux 상자에 있습니다. BTW, 나는 with open(...) as f: 패턴을 사용했을 것입니다. 그러나이 경우에는 함수가 반환 된 후에도 mmap이 열려 있어야합니다.

답변

2

파일을 자동으로 성장하지 않는 mmap에의 유닉스 버전,하지만 당신은 단지 파일을 자신처럼 뭔가 제로 쓸 수 있습니다 :

size = 83456 
self.file = open("/tmp/installer.ipk", "w+b") 
self.file.write("\0" * size) 
self.file.flush() 
self.mm = mmap.mmap(self.file.fileno(), size, access=mmap.ACCESS_WRITE) 
+0

감사합니다. 나는 문서를 다시 읽고 윈도우 섹션을 읽고 있다는 것을 깨달았다. 다음은 고정 크기로 파일을 작성하는 다른 방법입니다.이 방법은 조금 더 빠릅니다. http://stackoverflow.com/questions/8816059/create-file-of-particular-size-in-python –

+0

@MarkLakata 좋은 트릭, 공유 주셔서 감사합니다. –