首页 > 代码库 > 标准文件IO详解(四)---打开流详解

标准文件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详解(四)---打开流详解