将所有零写入文件的最有效的最快方法是什么?包括错误检查.它只是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因为它反正对我来说并不直接
是否要使用相同长度的二进制零流替换文件的内容,或者是否只想清空文件?(使其长度为零)
无论哪种方式,最好使用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)
错误处理作为练习留下.
| 归档时间: |
|
| 查看次数: |
5415 次 |
| 最近记录: |