标准文件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详解---打开流详解的主要内容,如果未能解决你的问题,请参考以下文章