- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Unix系统编程.
《UNIX环境高级编程》
第五章 标准I/O库
1. Unix系统标准I/O库是在系统调用函数基础上构造的。
2. 流和FILE对象:
? 流的概念:ANSI C对程序移进或移出字符的操作进行了抽象,将字节流成为“流”,当程序打开或
写入一个文件时,此时就已经使得流与文件进行了结合。
流的类型主要有:文本流,二进制流.
一个进程已经预定了三个流,即标准输入,标准输出和标准出错。在文件中,分别对应的是STDIO_FILENO,STDOUT_FILENO和STDERR_FILENO.这三种流可以通过预定义FILE指针stdio, stdout和stderr加以引用。这些均定义在stdio.h头文件中!
? FILE对象的概念:FILE是一种数据结构,用于访问一个流,不能与存储在磁盘上的文件进行混淆。
3. 错误报告函数perror: 在I/O函数中,随时存在错误的可能,标准库函数在一个外部整型变量errno
中保存错误代码之后再将这个信息传递给用户程序,并提示错误的准确原因。
void perror(char const *message)
返回值:若message非空,则perror会打印出message中的内容,后面跟一个分号和一个空格,然后打印出一条解释error当前错误代码的信息。
4. 缓存:
标准I/O库提供了三种不同的缓存类型:全缓存,行缓存和无缓存。
? 全缓存:对于驻留在磁盘上的文件通常是由标准I/O实施全缓存的。
? 行缓存:当流涉及到一个终端(标准输入或者标准输出)时,典型地使用行缓存。
行缓存存在以下几个限制:
因为标准I/O库用来收集每一行的缓存的长度是固定的,所以只要填满了缓存,那么即使还没有写一个新行符,也进行I/O操作.
任何时候只要通过标准输入输出库要求从一个不带缓存的流,或一个行缓存的流(它预先要求从内核得到数据)得到输入数据,那么就会造成刷新所有行缓存输出流. 这也正是如printf函数向标准输出输出信息时会立即在终端上输出,而不管是否行缓存是否填满。
【注意】fflush函数在全缓存和行缓存方面存在差异:对于全缓冲,fflush移位着将缓存中的内容写入到磁盘上,而在行缓存方面,fflush表示丢弃已经存在缓存中的数据。
不带缓存
ANSI C要求下列缓存特征:
当且仅当标准输入和标准输出并不涉及交互作用设备时,它们才是全缓存的。
标准出错决不会是全缓存的。
? 改变缓存方式:
void setbuf(FILE *fp, char *buf)
int setvbuf(FILE *fp, char * buf, int mode, size_t size)
setbuf可以打开或者关闭缓存机制,当参数buf设置为空时,则会关闭缓存机制。否则,参数buf必须指向一个长度为BUFSIZ(1024)的缓存(参数在stduo.h定义) ,为一个流自行制定缓存区可以防止I/O函数库默认为它动态分配一个未知的缓冲区。
流与缓存的关系:当用setbuf函数为某个流指定了缓存关系后,此时可以看做流是指向缓存空间的,或者可以理解为它们共享一个内存区域。
setbuf函数运用经典错误与解释:
【解释】源程序在利用setbuf函数将标准输出流定向于buf数组之后,将会导致一个错误。因为buf是一个内部数组,而buf得到fflush的最后时刻是main函数结束之后,但是此时buf早已释放掉了,从而导致未能输出。解决方法就是将buf数组声明为静态数组或者直接放在函数外面。
对比setbuf函数,setvbuf函数的功能则更加强大,她不仅自行设置缓存区的大小(size),而且还可以直接指定缓存的类型(mode)。
_IOFBF 全缓存
_IOLBF 行缓存
_IONBF 不带缓存
5. 打开与关闭流操作函数:#include stdio.h
FILE *fopen(const char *pathname, const char *type)
FILE *freopen(const char *pathname, char *type, FILE *fp)-----------重定向
FILE *fdopen(int filedes, const char *type)
? fopen是一个普通的打开流的函数,若成功,它的返回值为指向FILE结构的指针;否则返回一个NULL指针。
【注意】在利用fopen函数试图打开文件时,一定要检查函数的返回值,因为若出现错误,它会返回一个NULL指针,这会对后面I/O操作造成错误。常见type有:
? freope
您可能关注的文档
- Unit3MakingEnquiries..doc
- Unit3Retailing零售业..doc
- UNIT3SIGNALWORDS..doc
- Unit3UndertheSea教师版..doc
- Unit3Watchoutwhennaturestrikesback..doc
- Unit3预习及翻译练习..doc
- Unit4Bodylanguage---usinglanguage..doc
- Unit4lesplanfor改SS..doc
- unit4单词详解..doc
- Unit5CrimeinCyberspace..doc
- 2023年度事业单位招聘练习题(综合题)附答案详解.docx
- 2023年度事业单位招聘测试卷及完整答案详解(名师系列).docx
- 2023年度事业单位招聘测试卷及完整答案详解【历年真题】.docx
- 2023年度事业单位招聘经典例题及完整答案详解【名师系列】.docx
- 2023年度事业单位招聘每日一练试卷附答案详解(B卷).docx
- 2023年度事业单位招聘每日一练试卷(能力提升)附答案详解.docx
- 2023年度事业单位招聘模考模拟试题附答案详解【达标题】.docx
- 2023年度事业单位招聘每日一练试卷附完整答案详解【精选题】.docx
- 2023年度事业单位招聘每日一练试卷(典型题)附答案详解.docx
- 2023年度事业单位招聘测试卷及答案详解(真题汇编).docx
最近下载
- 纳米陶瓷颗粒增强高铬铸铁铸渗层的组织分析.pdf VIP
- 农用植保无人机施药技术规程.doc VIP
- 税务总局电子申报软件纳税人端使用的说明书.doc VIP
- 【哔哩哔哩视频网站的财务风险识别与应对研究】8300字.docx VIP
- 成人肠内营养支持的护理.pdf VIP
- 中国热射病诊断与治疗指南(2025版).pptx VIP
- 统编版《道德与法治》四年级下册全册教案设计.docx VIP
- 区域地质调查设计编写提纲、地质图图式、区域地质调查报告编写提纲.pdf VIP
- 无钼镍高铬合金铸铁耐磨衬板的研制与应用.pdf VIP
- 一种低温脱除氢气中氧气的催化剂制备方法、催化剂及其应用.pdf VIP
文档评论(0)