首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >fd()的_commit问题

fd()的_commit问题
EN

Stack Overflow用户
提问于 2011-11-29 07:09:29
回答 1查看 976关注 0票数 0

在研究强制文件尽可能快地写入的过程中,我在一些地方看到了以下代码块:

代码语言:javascript
运行
复制
_commit(outputFile.rdbuf()->fd());

其中outputFile是std::ofstream对象。我基本上是这样做的:

代码语言:javascript
运行
复制
std::ofstream outputFile;
outputFile.write((char*)blocks, sizeof(blocks));
outputFile.flush();
_commit(outputFile.fd());
outputFile.close();

blocks是一个简单的char数组数组。我所做的是写入一个char数组数组来表示二进制文件的内容,然后将该数组推送到文件本身。我需要尽可能快地写入文件,因为介质是不太可靠的闪存,断电的机会非常高。

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

代码语言:javascript
运行
复制
error C2039: 'fd' : is not a member of 'basic_ofstream<char,struct std::char_traits<char> >'

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

编辑:我已经使用ofstream.fd()修改了上面的代码,它应该是ofstream的公共成员。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-29 08:47:31

应该有人写下这句话作为答案。他们没有,所以我要偷走他们的荣耀。:-)

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

示例中的_commit函数肯定是依赖于实现的。一个重要的提示是该名称以下划线开头。谷歌的一些信息表明,_commit只能在Windows上运行。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8303702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档