博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件描述符fd与FILE
阅读量:2242 次
发布时间:2019-05-09

本文共 1407 字,大约阅读时间需要 4 分钟。

文件描述符

c语言常用文件操作函数

FILE *fopen( const char *filename, const char *mode );     int fclose( FILE *stream );     size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

fopen成功打开一个文件后返回一个FILE*的文件指针,以后读文件关文件都需要这个文件指针。这个文件指针代表这个文件。

Linux中常用文件操作函数

int open(const char *pathname, int flags);        int open(const char *pathname, int flags, mode_t mode);        ssize_t write(int fd, const void *buf, size_t count);        int close(int fd);

open成功打开一个文件后返回一个数字,这个数字即使文件的文件描述符(fd)以后读文件,给文件些数据,关闭这个文件都需要一个文件描述符,文件描述符是这个文件的唯一标识符

open参数
pathname:带路径的一个文件名 
flags:以只读(O_RDONLY)只写(O_WDONLY)读(O_RDWR)方式打开,表示当前文件文件状态(O_CREAT若当前文件不存在则创建当前文件) 
一个整数可以传32个标志位,每个标志位只占一个bite位,想要将几个标志位一同传入可按位或 
mode:指的是八进制的权限,例0644(-rw-r–r-)

所以说FILE*fd在功能上是相同的,都用来表示一个文件 
write参数

fd:文件描述符 
buf:写入的数据 
count:数据个数 
返回值:ssize_t实际写入数据个数

fd

注意open的参数

O_WRONLY|O_CREAT以只读的方式打开,若没有该文件则新建一个,为什么有|参考flgs参数解释说明 
0664:即mode,给新创建文件设置权限在第二幅图中可以发现mylog的权限是(-rw-r–r-)

fdinfo

可以看到fd = 3,mylog的权限是644

为什么fd会是三呢 
我们再打开两个文件看看 
fd123
fd分配从三开始

因为当一个进程运行起来以后,系统会默认打开三个标准文件,分别是一个键盘文件和两个显示器文件,对应的文件描述符分别是0(stdin)1(stdout)2(stderr)文件类型分别是键盘,显示器,显示器。 
所以一个进程分配fd从三开始

fd分配规则

数组下表的形式从0开始依次分配

进程和文件本质关联

操作系统管理进程,首先将一个进程描述起来(task_struct)找到这个结构体就找到该进程 
操作系统管理文件,首先将一个文件描述起来(file_struct)这个file_struct就在task_struct里

file_struct

file_struct里有很多东西,例如文件的大小、文件创建的时间、文件权限etc,而里面的文件描述副就是file_struct结构体里的一个个数组的下表,一个进程运行起来系统默认打开三个标准文件,如何默认打开,只需要将文件的地址写到对应下标位置的数组中,所以0,1,2分别是键盘文件和两个tty

file_struct

你可能感兴趣的文章
Java编程思想重点笔记(Java开发必看)
查看>>
eclipse 创建maven 项目 动态web工程完整示例
查看>>
前端JSP与Spring MVC交互实用例子
查看>>
使用maven一步一步构建spring mvc项目
查看>>
hadoop map reduce 阶段笔记
查看>>
java jackcess 操作 access
查看>>
Git问题Everything up-to-date解决
查看>>
Hadoop HDFS文件操作的Java代码
查看>>
Hadoop学习笔记—3.Hadoop RPC机制的使用
查看>>
Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
查看>>
JTS Geometry关系判断和分析
查看>>
GIS基本概念
查看>>
Java文件操作①——XML文件的读取
查看>>
java学习总结之文件操作--ByteArrayOutputStream的用法
查看>>
Java生成和操作Excel文件
查看>>
Java的三种代理模式
查看>>
java静态代理与动态代理简单分析
查看>>
JTS Geometry关系判断和分析
查看>>
阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
查看>>
Intellij IDEA 使用技巧一
查看>>