- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
标准IO库函数
2.?标准I/O库函数 请点评
2.1.?文件的基本概念 请点评
我们已经多次用到了文件,例如源文件、目标文件、可执行文件、库文件等,现在学习如何用C标准库对文件进行读写操作,对文件的读写也属于I/O操作的一种,本节介绍的大部分函数在头文件stdio.h中声明,称为标准I/O库函数。
文件可分为文本文件(Text File)和二进制文件(Binary File)两种,源文件是文本文件,而目标文件、可执行文件和库文件是二进制文件。文本文件是用来保存字符的,文件中的字节都是字符的某种编码(例如ASCII或UTF-8),用cat命令可以查看其中的字符,用vi可以编辑其中的字符,而二进制文件不是用来保存字符的,文件中的字节表示其它含义,例如可执行文件中有些字节表示指令,有些字节表示各Section和Segment在文件中的位置,有些字节表示各Segment的加载地址。
在第?5.1?节 “目标文件”中我们用hexdump命令查看过一个二进制文件。我们再做一个小实验,用vi编辑一个文件textfile,在其中输入5678然后保存退出,用ls -l命令可以看到它的长度是5:
$ ls -l textfile
-rw-r--r-- 1 akaedu akaedu 5 2009-03-20 10:58 textfile
5678四个字符各占一个字节,vi会自动在文件末尾加一个换行符,所以文件长度是5。用od命令查看该文件的内容:
$ od -tx1 -tc -Ax textfile
000000 35 36 37 38 0a
5 6 7 8 \n
000005
-tx1选项表示将文件中的字节以十六进制的形式列出来,每组一个字节,-tc选项表示将文件中的ASCII码以字符形式列出来。和hexdump类似,输出结果最左边的一列是文件中的地址,默认以八进制显示,-Ax选项要求以十六进制显示文件中的地址。这样我们看到,这个文件中保存了5个字符,以ASCII码保存。ASCII码的范围是0~127,所以ASCII码文本文件中每个字节只用到低7位,最高位都是0。以后我们会经常用到od命令。
文本文件是一个模糊的概念。有些时候说文本文件是指用vi可以编辑出来的文件,例如/etc目录下的各种配置文件,这些文件中只包含ASCII码中的可见字符,而不包含像\0这种不可见字符,也不包含最高位是1的非ASCII码字节。从广义上来说,只要是专门保存字符的文件都算文本文件,包含不可见字符的也算,采用其它字符编码(例如UTF-8编码)的也算。
2.2.?fopen/fclose 请点评
在操作文件之前要用fopen打开文件,操作完毕要用fclose关闭文件。打开文件就是在操作系统中分配一些资源用于保存该文件的状态信息,并得到该文件的标识,以后用户程序就可以用这个标识对文件做各种操作,关闭文件则释放文件在操作系统中占用的资源,使文件的标识失效,用户程序就无法再操作这个文件了。
#include stdio.h
FILE *fopen(const char *path, const char *mode);
返回值:成功返回文件指针,出错返回NULL并设置errno第?2?节 “C标准I/O库函数与Unbuffered I/O函数”将会讲到这个标识叫做文件描述符)、I/O缓冲区和当前读写位置等信息,但调用者不必知道FILE结构体都有哪些成员,我们很快就会看到,调用者只是把文件指针在库函数接口之间传来传去,而文件指针所指的FILE结构体的成员在库函数内部维护,调用者不应该直接访问这些成员,这种编程思想在面向对象方法论中称为封装(Encapsulation)。像FILE *这样的指针称为不透明指针(Opaque Pointer)或者叫句柄(Handle),FILE *指针就像一个把手(Handle),抓住这个把手就可以打开门或抽屉,但用户只能抓这个把手,而不能直接抓门或抽屉。
下面说说参数path和mode,path可以是相对路径也可以是绝对路径,mode表示打开方式是读还是写。比如fp = fopen(/tmp/file2, w);表示打开绝对路径/tmp/file2,只做写操作,path也可以是相对路径,比如fp = fopen(file.a, r);表示在当前工作目录下打开文件file.a,只做读操作,再比如fp = fopen(../a.out, r);只读打开当前工作目录上一层目录下的a.out,fp = fopen(Desktop/file3, w);只写打开当前工作目录下子目录Desktop下的file3。相对路径是相对于当前工作目录(Current Working Directory)的路径,每个进程都有自己的当前工作目录,Sh
您可能关注的文档
最近下载
- Q/SH 0706-2016 金属材料验证性检验导则.pdf VIP
- 明清天主教文化传入中国的文化因素.docx VIP
- 2025年普通高校招生考试(八省联考)英语试题及答案.pdf VIP
- 晚晴簃诗汇--卷一百四十九 .pdf VIP
- 物流项目管理第一章.ppt VIP
- 物流项目管理案例分析.docx VIP
- [黔西南]2024年贵州黔西南州红十字会引进人才笔试历年典型考题及解题思路分析附带答案详解.docx VIP
- 现代数值计算(第3版)课后习题答案解析.pdf
- [黔西南]2024年贵州黔西南州农业农村局引进人才笔试历年典型考题及解题思路分析附带答案详解.docx VIP
- 2024年05月贵州黔西南州农业农村局引进人才笔试历年典型考点解题思路附带答案详解.docx VIP
文档评论(0)