c语言标准库详解(一):<stdio.h>之文件操作

<stdio.h>总述

头文件<stdio.h>中定义的输入和输出函数、类型以及宏的数目几乎占整个标准库的三分之一。
流(stream)是与磁盘或其它外围设备关联的数据的源或目的地。尽管在某些系统中(如在著名的 UNIX 系统中),文本流和二进制流是相同的,但标准库仍然提供了这两种类型的流。文本流是由文本行组成的序列,每一行包含 0 个或多个字符,并以’\n’ 结尾。在某些环境中, 可能需要将文本流转换为其它表示形式(例如把’\n’映射成回车符和换行符),或从其它表示形式转换为文本流。二进制流是由未经处理的字节构成的序列,这些字节记录着内部数据, 并具有下列性质:如果在同一系统中写入二进制流,然后再读取该二进制流,则读出和写入的内容完全相同。

注:
在一些语言中,二进制流与文本流的区别还是比较大的,比如Java语言。如果文件是由程序而非人来读取,推荐二进制流。

打开一个流,将把该流与一个文件或设备连接起来,关闭流将断开这种连接,打开一个 文件将返回一个指向 FILE 类型对象的指针,该指针记录了控制该流的所有必要信息,在不引 起歧义的情况下,我们在下文中将不再区分“文件指针”和“流” 。
程序开始执行时,stdin、stdout 和 stderr 这 3 个流已经处于打开状态。

fopen()函数

下列函数用于处理与文件有关的操作。其中,类型size_t是由运算符sizeof生成的无符号整型。

FILE *fopen(const char *filename,const char *mode)

fopen函数打开filename指定的文件,并返回一个与之相关的流。如果打开操作失败,则返回NULL。
访问模式mode可以为下列合法值之一:

mode 作用
“r” 打开文本文件用于读
“w” 创建文本文件用于写,并删除已存在的内容(如果有的话)
“a” 追加;打开或创建文本文件,并向末尾追加内容
“r+” 打开文本文件用于更新(即读和写)
“w+” 创建文本文件用于更新,并删除已存在的内容(如果有的话)
“a+” 追加;打开或创建文本文件用于更新,写文件时追加到文件末尾

后 3 种方式(更新方式)允许对同一文件进行读和写。在读和写的交叉过程中,必须调用 fflush 函数或文件定位函数。如果在上述访问模式之后再加上 b,如“rb”或“w+b”等,则表示对二进制文件进行操作。文件名 filename 限定最多为 FILENAME_MAX 个字符。一次最多可打开 FOPEN_MAX 个文件。

freopen()函数

FILE *freopen(const char *filename,const char *mode,FILE *stream)

freopen 函数以 mode 指定的模式打开 filename 指定的文件,并将该文件关联到stream指定的流。它返回 stream;若出错则返回 NULL。Freopen 函数一般用于改变与stdin、stdout 和 stderr 相关联的文件。

fflush()函数

int fflush(FILE *stream)

对输出流来说,fflush函数将已写到缓冲区但尚未写入文件的所有数据写到文件中。对输入流来说,其结果是未定义的。如果在写的过程中发生错误,则返回 EOF,否则返回 0。fflush(NULL)将清洗所有的输出流。

fclose()函数

int fclose(FILE *stream)

fclose 函数将所有未写入的数据写入stream 中,丢弃缓冲区中的所有未读输入数据,并释放自动分配的全部缓冲区,最后关闭流。若出错则返回 EOF,否则返回 0。

remove()函数

int remove(const char *filename)

remove 函数删除 filename指定的文件,这样,后续试图打开该文件的操作将失败。 如果删除操作失败,则返回一个非 0 值。

rename()函数

int rename(const char *oldname,const char *newname)

rename函数修改文件的名字。如果操作失败,则返回一个非0值。

tmpfile()函数

FILE *tmpfile(void)

tmpfile函数以模式"wb+"创建一个临时文件,该文件在被关闭或程序正常结束时将被 自动删除。如果创建操作成功,该函数返回一个流;如果创建文件失败,则返回 NULL。

tmpnam()函数

char *tmpnam(char s[L_tmpnam])

tmpnam(NULL)函数创建一个与现有文件名不同的字符串,并返回一个指向一内部静态数组的指针。tmpnam(S)函数把创建的字符串保存到数组 s 中,并将它作为函数值返回。s 中至少要有 L_tmpnam 个字符的空间。Tmpnam 函数在每次被调用时均生成不同的名字。在程序执行的过程中,最多只能确保生成 TMP_MAX 个不同的名字。注意,tmpnam 函数只是用 于创建一个名字,而不是创建一个文件。

setvbuf()函数

int setvbuf(FILE *stream,char *buf,int mode,size_t size)

setvbuf 函数控制流 stream 的缓冲。在执行读、写以及其它任何操作之前必须调用 函数。当 mode 的值为_IOFBF 时,将进行完全缓冲。当 mode 的值为_IOLBF 时,将对文本文件进行行缓冲,当mode 的值为_IONBF 时,表示不设置缓冲。如果 buf 的值不是 NULL,则 setvbuf 函数将 buf 指向的区域作为流的缓冲区,否则将分配一个缓冲区。size 决定缓 冲区的长度。如果 setvbuf 函数出错,则返回个一非 0值。

setbuf()函数

void setbuf(FILE *stream,char *buf)

如果 buf 的值为 NULL,则关闭流 stream 的缓冲;否则 setbuf 函数等价于 (void)setvbuf(stream, buf, _IOFBF, BUFSIZ)。

c语言标准库详解(一):stdio.h之文件操作相关推荐

  1. c语言标准库详解(十二):非局部跳转setjmp.h

    c语言标准库详解(十二):非局部跳转<setjmp.h> 概述 头文件<setjmp.h>中的声明提供了一种不同于通常的函数调用和返回顺序的方式,特别是,它允许立即从一个深层嵌 ...

  2. c语言标准库详解(八):数学公式math.h

    c语言标准库详解(八):数学公式<math.h> 概述 头文件<math.h>中声明了一些数学函数和宏. 宏 EDOM 和 ERANGE(在头文件<error.h> ...

  3. c语言标准库详解(十五):limits.h与float.h

    c语言标准库详解(十五):<limits.h>与<float.h> 概述 <limits.h> 头文件<limits.h>定义了一些表示整型大小的常量. ...

  4. c语言标准库详解(十一):可变参数表stdarg.h

    c语言标准库详解(十一):可变参数表<stdarg.h> 概述 头文件<stdarg.h>提供了遍历未知数目的函数参数表的功能. 假定函数 f 带有可变数目的实际参数,last ...

  5. c语言标准库详解(七):字符串函数string.h

    c语言标准库详解(七):字符串函数<string.h> 头文件<string.h>中定义了两组字符串函数.第一组函数的名字以 str 开头:第二组函数的名字以 mem 开头.除 ...

  6. c语言标准库详解(十四):时间函数time.h

    c语言标准库详解(十四):时间函数<time.h> 概述 头文件<time.h>中声明了一些处理日期与时间的类型和函数.其中的一些函数用于处理当地时间,因为时区等原因,当地时间 ...

  7. c语言标准库详解(零):总述

    c语言标准库详解(零):总述 关于标准库 标准库不是C语言本身的构成部分,但是支持标准C的实现会提供函数库中的函数声明.类型以及宏定义 标准库的内容 标准库中的函数.类型以及宏分别在下面的标准头文件中 ...

  8. python中os模块详解_Python OS模块(常见文件操作示例)

    1 Python 常见文件操作示例 2. 3. os.path 模块中的路径名访问函数 4. 分隔 5. basename() 去掉目录路径 , 返回文件名 6. dirname() 去掉文件名 , ...

  9. 详解Python中的File(文件)操作

    目录 Python中的File(文件)操作 写入文件的操作: 读取文件的操作: 一.文件操作相关函数 1. open() 打开文件 2. seek() 设置文件指针的位置 3. write() 写入内 ...

  10. C++ time.h 库详解

    C++ time.h 库详解 time.h 是C++常用标准库之一 常用函数 clock localtime asctime ctime difftime gmtime time tzset strf ...

最新文章

  1. Python参考书籍
  2. linux系统安装mysql
  3. “新SaaS”引爆产业奇点《2017中国SaaS用户研究报告》
  4. 5分钟了解TypeScript
  5. org.apache.hadoop.hbase.ClockOutOfSyncException
  6. image 闪烁 c# ajax updatepanel,Why doesn't asp:UpdatePanel refresh an Image?
  7. [html] 举例说明图片懒加载的方案有哪些?
  8. UVa 1252 (状压DP + 记忆化搜索) Twenty Questions
  9. java中交换机的作用_交换机链路聚合在网络中的作用
  10. 20090726选股
  11. 计算机类专业教指委委员名单,教育部高等学校计算机类专业教学指导委员会举办《高校计算机系统能力培养教学研讨会》...
  12. element-ui实现表格分页和搜索功能
  13. c++中的指数函数怎么写
  14. 工作中遇到的问题和一些经验总结
  15. 基因测序仪四十年:回顾、致敬与展望
  16. 有效APP地推的必要性
  17. 【计算机组成原理】门阵列译码器
  18. 计算机专业英语第四版教程课文翻译,计算机专业英语教程(第4版)译文8.1
  19. julia换源(更换国内镜像站)
  20. m分别使用BP神经网络和GRNN网络进行时间序列预测matlab仿真

热门文章

  1. 老毛桃+360急救箱结合(转)
  2. JBoss下载与安装
  3. java中socket编程实例_Java Socket编程实例
  4. Diablo II中的各种hacks
  5. Android apk快速定位、灰色按钮克星--DroidSword
  6. UKEY开发,vue+websocket实现用户登录UKEY认证
  7. Unity3d十二 3d主要引擎名称Ogre Unreal Unity Gamebryo Bigworld
  8. 电路设计——教你如何阅读数据手册
  9. 文章整理 - 匠人精神
  10. 《数字信号处理》系统函数的频率响应、零极点和稳定性的实现