归零文件

Que*_*eer 4 c file-io

将所有零写入文件的最有效的最快方法是什么?包括错误检查.它只是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); 
Run Code Online (Sandbox Code Playgroud)

其中零是我怀疑的文件大小数组.不确定究竟是什么off_t因为它反正对我来说并不直接

zwo*_*wol 5

是否要使用相同长度的二进制零流替换文件的内容,或者是否只想清空文件?(使其长度为零)

无论哪种方式,最好使用OS文件I/O原语.方案一:

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);
Run Code Online (Sandbox Code Playgroud)

方案二:

int fd = open(file_to_truncate, O_WRONLY);
ftruncate(fd, 0);
fsync(fd);
close(fd);
Run Code Online (Sandbox Code Playgroud)

错误处理作为练习留下.