2013-06-30 42 views
5

Trong Python trên Windows tôi có thể tạo một tập tin lớn bằng cáchTăng kích thước của một tập tin sử dụng mmap

from mmap import mmap 
    f = open('big.file', 'w') 
    f.close() 
    f = open('big.file', 'r+') 
    m = mmap(f.fileno(), 10**9) 

Và bây giờ là big.file (khoảng) 1 gigabyte. Trên Linux, mặc dù, điều này sẽ trả về ValueError: mmap length is greater than file size.

Có cách nào để có được hành vi tương tự trên Linux như với Windows không? Nghĩa là, để có thể tăng kích thước của tệp bằng cách sử dụng mmap?

Trả lời

4

Trên hệ thống POSIX ít nhất, mmap() không thể được sử dụng để tăng (hoặc giảm) kích thước của tệp. Chức năng của mmap() là bộ nhớ ánh xạ một phần của một tập tin. Đó là hợp lý rằng điều bạn yêu cầu để bản đồ thực sự tồn tại! Thành thật mà nói, tôi thực sự ngạc nhiên rằng bạn thực sự có thể làm điều này dưới MS Windows.

Nếu bạn muốn phát triển tệp, chỉ cần ftruncate() nó trước khi bạn mmap() nó.

+0

Điều đó hữu ích vì bạn cũng có thể rút ngắn tệp. Bây giờ tôi muốn Windows có 'ftruncate()'! –

+0

Windows không có 'ftruncate()'? Vâng, điều đó làm tôi ngạc nhiên :-) Tuy nhiên, chắc chắn nó phải có * một số * tương đương với phương pháp phát triển hoặc thu hẹp các tập tin. – Celada

+0

Tôi nên nói rằng tôi đang căn cứ tuyên bố đó ra khỏi Tài liệu Python, không tắt bất kỳ tài liệu Windows nào. –

Các vấn đề liên quan