Обнуление файла - PullRequest
       1

Обнуление файла

4 голосов
/ 20 октября 2011

Какой самый быстрый и эффективный способ записать все нули в файл? в том числе проверка ошибок. Будет ли это просто fwrite? или fseek участвует?

Я посмотрел в другом месте и увидел код, подобный этому:

off_t size = fseek(pFile,0,SEEK_END);
fseek(pFile,0,SEEK_SET);

while (size>sizeof zeros)  
    size -= fwrite(&address, 1, sizeof zeros, pFile); 
while (size)    
    size -= fwrite(&address, 1, size, pFile); 

где нули - это массив размера файла, который я подозреваю. Не уверен, что именно было off_t, потому что оно не было для меня интуитивно понятным

Ответы [ 2 ]

5 голосов
/ 20 октября 2011

Вы хотите заменить содержимое файла потоком двоичных нулей одинаковой длины, или вы просто хотите очистить файл? (сделайте так, чтобы он имел длину ноль)

В любом случае, это лучше всего делать с примитивами ввода-вывода файлов ОС. Вариант первый:

char buf[4096];
struct stat st;
int fd;
off_t pos;
ssize_t written;

memset(buf, 0, 4096);
fd = open(file_to_overwrite, O_WRONLY);
fstat(fd, &st);

for (pos = 0; pos < st.st_size; pos += written)
    if ((written = write(fd, buf, min(st.st_size - pos, 4096))) <= 0)
        break;

fsync(fd);
close(fd);

Вариант два:

int fd = open(file_to_truncate, O_WRONLY);
ftruncate(fd, 0);
fsync(fd);
close(fd);

Обработка ошибок оставлена ​​как упражнение.

4 голосов
/ 20 октября 2011

mmap () и memset ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...