美好的一天,我打开文件写一些内容。下面的代码:
class file_worker
{
public:
file_worker(const std::string &path):path_(path),stop_(false)
{
umask(0);
file_descriptor_ = open(path_.c_str(),O_WRONLY|O_CREAT, 0666);
}
void operator()()
{
if(file_descriptor_!=-1)
{
clear_file();
//write something
}
}
void clear_file()
{
}
~file_worker()
{
if(file_descriptor_!=-1)
{
close(file_descriptor_);
}
}
private:
const std::string path_;
int file_descriptor_;
bool stop_;
};
如何实现clear_file();在不关闭文件描述符的情况下可以清除(删除所有文件内容)的功能?哪种方式更快写入文件?是否有可能在文件的不同部分同时写入某些线程的文件(使用lseek可能)?
答案 0 :(得分:1)
您没有定义清除文件对您意味着什么。
您可以将文件缩小为0尺寸,然后使用ftruncate(2)。
您可以将文件中的所有字节归零。然后,将lseek(2)与write(2)
或pwrite(2)
如果某个其他进程同时写入文件可能会出现问题(这是不好的做法)。
我不确定使用多线程会真正加速所有字节的归零。 (这是磁盘密集型的,除非系统文件缓存被命中,多线程不会加速磁盘),所以我会首先进行基准测试。