打开和关闭流

2014-07-24 20:28:14   最后更新: 2014-07-24 20:28:14   访问数量:763




可以使用三个函数中的一个打开流:

FILE * fopen(const char * path,const char * mode); FILE *freopen(const char *filename,const char *type, FILE *stream); FILE * fdopen(int fildes,const char * mode);

 

均声明于stdio.h头文件中,若调用成功则返回文件指针,调用失败返回NULL

 

  • 三个函数的区别是:

  1. fopen打开一个指定的文件
  2. freopen在一个指定的流上打开一个指定的文件,若该流已经打开,则先关闭该流。若已经定向,则清除定向。此函数一般用于将指定的文件打开为一个预定的流:标准输入、标准输出或标准失败
  3. fdopen获取一个现有的文件描述符,并使一个标准IO流与该描述符相结合。此函数通常用于由创建管道和网络通信函数返回的描述符。因为这些特殊类型的文件不能用fopen函数打开,所以需要先调用设备专用函数以获取一个文件描述符

 

  • type参数指定IO流的读写方式,ISO C规定了15种type的值

  1. r 或 rb
  2. 为读而打开

  3. w 或 wb
  4. 如果文件不存在则创建,若文件存在则先将文件截短至0

  5. a 或 ab
  6. 如果文件不存在则创建,若文件存在则定位到文件尾

  7. r+ 或 r+b 或 rb+
  8. 为读写打开文件

  9. w+ 或 w+b 或 wb+
  10. 为读写打开并将文件截短至0

  11. a+ 或 a+b 或 ab+
  12. 在文件尾端打开读写文件或创建文件

 

  • 注:

  1. ISO C规定b参数作为普通文件和二进制文件的区分,而对于UNIX,普通文件与二进制文件并没有区别,所以是否有b参数对程序没有任何影响
  2. 对于fdopen,不会截短文件,也不能用于创建文件
  3. 允许多个进程使用标准IO添写方式(a或ab)打开同一个文件,来自每个进程的数据都将正确地写入文件
  4. 当以读写类型打开一个文件时(type中有+),则具有下述限制:
    1. 如果中间没有 fflush、fseek、fsetpos 或 rewind,则在输出的后面不能直接跟随输入
    2. 如果中间没有 fseek、fsetpos 或 rewind,或者一个输入操作没有到达文件尾端,则在输入之后不能直接跟随输出

  5. 对于文件有以下限制:
    1. 文件必须已存在:r、r+,其余选项会在文件不存在时创建文件
    2. 打开时擦除文件内容:w、w+

 

int fclose ( FILE * fp );

 

定义于stdio.h中,调用成功返回0,出错返回EOF

在该文件被关闭之前,会丢弃缓冲区中的任何输入数据,冲洗缓冲区中的输出数据

在进城结束时,所有带未写缓冲数据的标准IO流都会被冲洗

 






读书笔记      技术帖      linux      unix      c++      cpp      c语言      龙潭书斋      apue      unix环境高级编程      fopen      freopen      fdopen      fclose     


京ICP备15018585号