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