gpt4 book ai didi

c++ - _commit 问题与 fd()

转载 作者:行者123 更新时间:2023-11-28 01:01:53 27 4
gpt4 key购买 nike

在研究尽可能快地写入强制文件时,我在几个地方看到了以下代码块:

_commit(outputFile.rdbuf()->fd());

其中 outputFile 是一个 std::ofstream 对象。我基本上在做以下事情:

std::ofstream outputFile;
outputFile.write((char*)blocks, sizeof(blocks));
outputFile.flush();
_commit(outputFile.fd());
outputFile.close();

blocks 只是一个 char 数组的数组。我正在做的是写入一个 char 数组来表示二进制文件的内容,然后将该数组推送到文件本身。我需要尽快写入文件,因为介质是不太可靠的闪存,而且断电的可能性异常高。

当我尝试编译时,我在代码的 _commit 行收到以下错误:

error C2039: 'fd' : is not a member of 'basic_ofstream<char,struct std::char_traits<char> >'

我应该如何获取 outputFile 的文件描述符并将其传递给 _commit?

编辑:我更改了上面的代码以反射(reflect)使用ofstream.fd(),它应该是ofstream 的公共(public)成员。 .

最佳答案

有人应该把这个写成答案。他们没有,所以我会窃取他们的荣耀。 :-)

文件描述符依赖于实现。有些系统可能没有。所以 C++ 标准没有定义任何从 fstreamfilebuf 获取它的方法。

您示例中的 _commit 函数绝对依赖于实现。一个重要提示是名称以下划线开头。一些 Google 显示 _commit 仅适用于 Windows。

要获得所需的内容,您可以编写自己的派生自 streambuf 的类。这个定制的类将以您想要使用的低级术语(Windows、POSIX)实现 IO,并且可以提供额外的函数来返回文件描述符或将数据刷新到磁盘。

要将自定义类用作流,您需要创建一个 ostream 并将它传递给您的 streambuf 类的指针。

关于c++ - _commit 问题与 fd(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8303702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com