C++ linux中如何正确清除文件
你好,我打开文件写了一些内容。代码如下:C++ linux中如何正确清除文件,c++,linux,file-descriptor,C++,Linux,File Descriptor,你好,我打开文件写了一些内容。代码如下: 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()() {
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大小,用于此 您可以将文件中的所有字节归零。然后,与
write(2)
一起使用,或者
如果其他进程同时写入文件,则可能会出现问题(这是一种不好的做法)
我不确定使用多线程是否真的会加速所有字节的归零。(这样做是磁盘密集型的,除非系统文件缓存被命中,多线程不会加快磁盘速度),因此我会首先进行基准测试。没有一个进程可以写入,但如果我使用具有lseek功能的线程,可能会提高写入速度?您应该在构造函数中测试
打开的成功性,当它失败时,可能会使用peror
。