标准文件IO详解---打开流详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准文件IO详解---打开流详解相关的知识,希望对你有一定的参考价值。

c库中提供了 fopen 和 fdopen两个函数用于打开流,获取到文件流指针。
=====================================================
函数原型:
技术分享
技术分享
函数参数:
  • path:要打开文件的路径
  • mode:打开的模式
返回值:
  • 调用成功时返回 文件流指针
  • 调用失败时返回 NULL
=====================================================
mode参数可以是以下参数中的一个:
  • r:只读模式;要求文件必须存在
  • w:只写模式;文件存在则将文件内容清零,文件不存在则创建
  • r+:读写模式;要求文件必须存在
  • w+:读写模式;文件存在则将文件内容清零,文件不存在则创建
  • a:追加只写模式;文件不存在则创建,文件存在内容也不清零
  • a+:追加读写模式;文件不存在则创建,文件存在内容也不清零
当fopen函数创建文件的时候,其文件的权限默认就是0666,当然还会受到文件权限屏蔽位的影响。
========================================================
函数原型:
技术分享
技术分享
函数参数:
  • fd:要打开的文件描述符
  • mode:打开的模式
返回值:
  • 调用成功时返回 文件流指针
  • 调用失败时返回 NULL
=======================================================
  使用fdopen函数可以用来通过文件描述符 fd 来获取一个与其对应的文件流指针。主要的用途就在于一些特殊类型的文件在Linux系统中不能够使用fopen函数来打开,但是可以获得该文件的文件描述符 fd,使用fdopen函数可以通过文件描述符来获取到对应的文件流指针,从而使用标准 IO 函数来操作。
  关于fdopen函数有一点要注意,在关闭文件的时候一定不能只关闭文件描述符 fd ,而是要关闭文件流指针,这是因为如果先关闭文件描述符 fd ,那么内核态的文件表项将会被释放,但可能此时我们操作的数据仍然存放在用户层的缓冲区中,这会导致我们的数据丢失。而直接关闭文件流指针就不会出现这个问题。
  还有一点要注意,fdopen函数的mode参数必须是之前打开文件获取文件描述符时指定的权限的子集,不能够超越之前的文件权限。而且fdopen函数不能够将文件内容清零。
 

以上是关于标准文件IO详解---打开流详解的主要内容,如果未能解决你的问题,请参考以下文章

文件IO详解---标准输入标准输出和标准错误

标准文件IO详解---标准输入流标准输出流和标准错误流

标准文件IO详解---定位流

标准文件IO详解---fclose函数详解

C++IO流详解

C++IO流详解