如何正确清除文件在linux中
How propertly clear file in 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可能)?
您没有定义清除文件对您意味着什么。
您可以将文件缩小到0大小,使用ftruncate(2)。
可以将文件中的所有字节归零。然后,对write(2)
使用lseek(2)或者pwrite(2)
如果其他进程同时写入文件(这是不好的做法),可能会出现问题。
我不确定使用多线程真的会加速所有字节的归零。(这样做是磁盘密集型的,除非命中系统文件缓存,并且多线程不会加速磁盘),所以我将首先进行基准测试。
相关文章:
- 找不到Linux Visual Studio代码C++文件
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 无法在 Linux 上运行C++ ZMQ 项目的可执行文件
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 在字符串中引用 Linux 用户名以打开文件
- Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
- 如何在 Linux 中从 .so 文件打开可执行文件?
- 在 Linux 上没有 /proc/self/exe 的 C/C++ 运行时可执行文件的大小?
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 如何用.so文件linux打包所有需要的库
- 在Linux Mint 19下,从哪里提取wxWidgets的源代码(.cpp文件)用于步骤内部调试
- 在 Linux 上,目标文件比在 macOS 或 Windows 上大 2.5 倍
- 在Windows上运行Linux Makefile(.so文件)
- 我可以在Windows(Visual C++)中读取bin文件,但不能在linux(GCC)上读取bin文件
- C++ 可执行文件在运行时找不到库,即使它在 /usr/lib 中(在 Linux 上)
- 没有内核的 Linux 文件系统
- 从开发人员的角度来看Linux文件夹结构