-1

美好的一天,我打开文件写入一些内容。代码如下:

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)?

4

1 回答 1

1

您没有定义清除文件对您意味着什么。

您可以将文件缩小到 0 大小,为此使用ftruncate(2)

您可以将文件中的所有字节归零。然后,使用lseek (2)write(2)pwrite(2)

如果其他进程同时写入文件,则可能会出现问题(这是不好的做法)。

我不确定使用多线程是否真的会加速所有字节的归零。(这样做是磁盘密集型的,除非系统文件缓存被命中,并且多线程不会加速磁盘),所以我会先进行基准测试。

于 2013-03-21T06:36:04.997 回答