Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] File con buco

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    10

    [C] File con buco

    Come posso creare un file con buco? Cioè determinata una certa grandezza, ma che effettivamente non occupa nessun blocco?

    Per capirci con "stat file" devo avere: Blocks: 0 Size: XXXXXXX

    Ho provato ad aprire un file, e spostarmi con fseek/lseek, posizionando in fondo EOF con fwrite, ma comunque mi da sì la grandezza specificata, però occupa un blocco comunque..

    Grazie

  2. #2
    EOF non è un vero carattere, è solo un valore usato da alcune funzioni per segnalarti che il file è terminato. Di suo il file finisce quando finisce, non devi inserire alcunché per terminarlo, dunque la fwrite è superflua.
    La sola fseek dovrebbe essere sufficiente a creare il tuo sparse file, che a questo punto potrebbe anche non occupare alcun blocco; uso il condizionale perché il filesystem potrebbe comunque necessitare di un blocco per memorizzare le informazioni sul "buco".
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    10
    No, avevo già provato, ma una volta chiuso il file, è come se la fseek non avesse agito per niente..

  4. #4
    In effetti hai ragione, guardando la documentazione di lseek (che di fatto viene chiamata dietro le quinte) si legge:
    The lseek() function allows the file offset to be set beyond the end of the file (but this does not change the size of the file). If data is later written at this point, subsequent reads of the data in the gap (a "hole") return null bytes ('\0') until data is actually written into the gap.
    Dunque devi necessariamente scrivere qualcosa dopo se vuoi che il "buco" si crei effettivamente. Chiedo scusa per l'errore nella precedente risposta.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.