• [^] # Re: AMHA

    Posté par . En réponse au message Supprimer le contenu d'un fichier. Évalué à 1.

    Je ne parle pas de la consommation disque, mais de la quantité écrite sur le disque: si je fais 50 fois appel à la fonction sur un fichier de 100 Mo, je devrais réecrire entièrement le fichier sur le disque 50 fois, donc 50x100 = 5000 Mo = 5 Go... Et écrire 5Go sur le disque, ça se sent
    Un moyen serait de ne pas faire de fichier temporaire, et ainsi ce n'est pas la peine de réécrire tout ce qui est avant p (à partir de p on décale toutes les données de n octets vers le début). Si les données à supprimer sont vers la fin, ce sera rapide, mais si elles sont au début, on aura le même problème.. Je pense que je vais faire comme ça, sauf si c'est trop lent... Si ça intéresse quelqu'un, voilà ma fonction:

    void fshrink(int fd, off_t start, size_t len) {
    struct stat st;
    size_t buf_size = COPY_BUFFER_SIZE, read_size;
    uint8_t buf[buf_size];

    lseek(fd, start, SEEK_SET);

    do {
    lseek(fd, len, SEEK_CUR);
    read_size = read(fd, buf, buf_size);
    lseek(fd, -len-read_size, SEEK_CUR);
    write(fd, buf, read_size);
    lseek(fd, buf_size, SEEK_CUR);
    } while(read_size == buf_size);

    fstat(fd, &st);
    ftruncate(fd, st.st_size - len);
    }

    Bon, si ça marche pas, j'ai plus qu'à faire le "hack immonde" :(