Как правильно очистить файл в linux

Добрый день, я открываю файл для записи в него некоторого контента. Код ниже:

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

-1

Решение

Вы не определили, что для вас означает очистка файла.

Вы можете сжать файл до 0, используйте ftruncate (2) для этого.

Вы можете обнулить все байты в файле. Затем используйте lseek (2) с write(2) или возможно pwrite (2)

Могут быть проблемы, если какой-то другой процесс пишет файл одновременно (что является плохой практикой).

Я не уверен, что использование многопоточности действительно ускорит обнуление всех байтов. (это занимает много места на диске, если системный файловый кэш не поврежден, а многопоточность не увеличивает скорость работы с диском), поэтому я бы сначала проверил.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]