- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于文件输入指针和输出指针的讨论
说明:本文来自于北京邮电大学软件学院2014 级学生与我的交流邮件。发表本
文前在征求作者意见时,该邮件作者要求匿名,因此本文中不出现作者名字。
摘要:
本文对于C++的fstream 类是否存在 “输入”文件指针与 “输出”文件指针给
出了详实的依据。
文章的结论如下:
C++03 标准在“文件输入”和“文件输出”的背景下谈到“文件指针”,并没
有说明是否隐含了“文件输入指针”和 “文件输出指针”。
C++14 标准则将文件输入和文件输出下所进行的文件指针操作分开讨论,并单
独加了一条修改文件指针的描述。没有了输入或输出的背景,显然在fstream
中只能有一个文件指针。文件输入和输出操作都会影响这个文件指针。
注:我们说的C++的stream 类中所谓的“指针”,实际上是流 (比如文件、字符串)中的一个
位置标记,用整数表示,与C 语言中的 “FILE*”是不同的。在这里我们不纠结于术语叫法。
补充说明:
在C++03 标准之下,可以认为,fstream 中的 “文件输入指针”与 “文件输出
指针”是否为同一个指针,取决于具体实现;
在C++14 标准之下,则认为一个fstream 对象中只有一个文件指针,不论输入
还是输出都使用该指针;
在stringstream 类中,字符串流的输入输出指针 (描述符)是独立的。
C++流库的设计很令人费解,stringstream 中针对输入输出各有一个指针,但
在fstream 中,又只有一个指针。在fstream 中 tellp 与tellg 功能相同,
seekp 与seekg 也相同,而在stringstream 中,两对函数功能又不一样。谁要
是只看名字不查标准,那就会被坑死!在这一点上,C++是很令人讨厌的。
以下为邮件原文
崔老师:
您好。
最近和您在讨论 istream::tellg / istream::seekg 和 ostream::tellp /
ostream::seekp 。现在把我获得的信息在这里整理。
在 Arch Linux 下的 GCC 4.9.2-4 编译并测试。
实验
测试代码
#include iostream
#include fstream
using namespace std;
int main()
{
fstream file(test, ios::in | ios::out | ios::trunc);
file.write(aoeuhtns, 8);
cout After write: file.tellg() file.tellp()
endl;
file.seekg(2);
cout After seekg: file.tellg() file.tellp()
endl;
file.seekp(4);
cout After seekp: file.tellg() file.tellp()
endl;
return 0;
}
实验结果
c++ git:(master) ✗ % g++ --std=c++98 t.cpp; ./a.out
15:34
After write:8 8
After seekg:2 2
After seekp:4 4
c++ git:(master) ✗ % g++ --std=c++03 t.cpp; ./a.out
15:34
After write:8 8
After seekg:2 2
After seekp:4 4
c++ git:(master) ✗ % g++ --std=c++14 t.cpp; ./a.out
15:34
After write:8 8
After seekg:2 2
After seekp:4 4
结论
对于以读写方式打开的文件,读和写指针是共用的。可能是因为纵使传给 G++
的标准不同,但都用的是同样的 STL (/usr/include/c++/4.9.2 ),所以结果
相同。
源代码分析
在 /usr/include/c++/4.9.2/fstream 中,通过包含 istream 和 ostream 实现代
码重用。
在 /usr/include/c++/4.9.2/bits/istream.tcc 中,通过 pubseekoff 返回结
果。
您可能关注的文档
- 三上信息第六课打打汉字说说话教学设计.doc
- 上锁挂牌管理规范(标准版).docx
- 丙型肝炎病毒再激活诊疗进展.pdf
- 两提一创学习心得.docx
- 东阳光鲜草-冬虫夏草不同部位核苷类成分分析比较.pdf
- 中尺度大气数值模拟及其进展_黄菁.pdf
- 中心学校2016语言文字规范化工作.doc
- 中文分词在标准检索中的应用.doc
- 中美价值观比较分析-英文.pdf
- 从互联网的发展看网络语言的趋势和动态规范.pdf
- [中央]2023年中国电子学会招聘应届生笔试历年参考题库附带答案详解.docx
- [吉安]2023年江西吉安市青原区总工会招聘协理员笔试历年参考题库附带答案详解.docx
- [中央]中华预防医学会科普信息部工作人员招聘笔试历年参考题库附带答案详解.docx
- [保定]河北保定市第二医院招聘工作人员49人笔试历年参考题库附带答案详解.docx
- [南通]江苏南通市崇川区人民法院招聘专职人民调解员10人笔试历年参考题库附带答案详解.docx
- [厦门]2023年福建厦门市机关事务管理局非在编工作人员招聘笔试历年参考题库附带答案详解.docx
- [三明]2023年福建三明市尤溪县招聘小学幼儿园新任教师79人笔试历年参考题库附带答案详解.docx
- [哈尔滨]2023年黑龙江哈尔滨市木兰县调配事业单位工作人员笔试历年参考题库附带答案详解.docx
- [上海]2023年上海市气象局所属事业单位招聘笔试历年参考题库附带答案详解.docx
- [台州]2023年浙江台州椒江区招聘中小学教师40人笔试历年参考题库附带答案详解.docx
最近下载
- 中国急性胰腺炎诊治指南(2021).docx
- 2024届高考散文阅读知识点即答题技巧概述+课件113张.pptx VIP
- 2024苏科版新教材八年级物理上册新课程内容解读课件(深度).pdf
- Unit3 第2课时Speed up Fuel up(教学设计)-三年级英语下册(外研版三起2024).pdf
- 第16课优秀影视作品欣赏与分析教学设计-2023—2024学年人教版初中综合实践活动八年级上册.docx
- 幼儿园中班音乐《章鱼和小鱼》 优质课件.pptx
- 考研真题武汉理工大学833材料科学基础历年考研真题汇编(含部分答案).docx
- 2024年度房地产市场总结报告:泉州-保利和润.docx
- 北京理工大学考博英语历年真题及详解.pdf
- 传热学(全套714页课件课件).pptx VIP
文档评论(0)