2013-06-30 23 views
5

In Python su Windows posso creare un file di grandi dimensioni daaumentare le dimensioni di un file utilizzando mmap

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

E ora big.file è (circa) 1 gigabyte. Su Linux, tuttavia, questo restituirà ValueError: mmap length is greater than file size.

C'è un modo per ottenere lo stesso comportamento su Linux come con Windows? Cioè, per essere in grado di aumentare le dimensioni di un file usando mmap?

risposta

4

Sui sistemi POSIX almeno, mmap() non può essere utilizzato per aumentare (o diminuire) la dimensione di un file. La funzione di mmap() è quella di memoria mappare una porzione di un file. È logico che la cosa che richiedi di mappare debba effettivamente esistere! Francamente, sono davvero sorpreso che tu sia effettivamente in grado di farlo con MS Windows.

Se si desidera far crescere un file, solo ftruncate() esso prima di mmap() esso.

+0

Oh è utile perché puoi anche abbreviare un file. Ora vorrei che Windows avesse 'ftruncate()'! –

+0

Windows non ha 'ftruncate()'? Beh, questo sorprende anche me :-) Eppure sicuramente deve avere * qualche * metodo equivalente per far crescere o restringere i file. – Celada

+0

Devo dire che sto basando questa affermazione su Python Docs, non sulla documentazione di Windows. –