file_table.c 文件分析 linux1_0\linux\fs\file_table.c

/**  linux/fs/file_table.c**  Copyright (C) 1991, 1992  Linus Torvalds*/#include <linux/fs.h>
#include <linux/string.h>
#include <linux/mm.h>struct file * first_file;  //开头文件.
int nr_files = 0;          //文件位置为0//文件双向链表插入文件点,并把first_file指向当前文件点。
static void insert_file_free(struct file *file)
{file->f_next = first_file;file->f_prev = first_file->f_prev;file->f_next->f_prev = file;file->f_prev->f_next = file;first_file = file;
}//双向链表删除文件点
static void remove_file_free(struct file *file)
{//如果first_file点被删,first_file 往下移if (first_file == file)first_file = first_file->f_next;//下个链表点指向前链表点if (file->f_next)file->f_next->f_prev = file->f_prev;//前个链表点指向下个链表点if (file->f_prev)file->f_prev->f_next = file->f_next;//当前删除点向前,向后指针指为空file->f_next = file->f_prev = NULL;
}//把链表点放到双向链表最后
static void put_last_free(struct file *file)
{remove_file_free(file);file->f_prev = first_file->f_prev;file->f_prev->f_next = file;file->f_next = first_file;file->f_next->f_prev = file;
}//根据申请的页,生成N个文件点,并同时插入双向链表
void grow_files(void)
{struct file * file;int i;//分配空页file = (struct file *) get_free_page(GFP_KERNEL);  //分配失败返回if (!file)return;//每页生成n个文件链表点nr_files+=i= PAGE_SIZE/sizeof(struct file);//如果不存在头节点的话,设定头节点; file 指向往下移动,个数i减1if (!first_file)file->f_next = file->f_prev = first_file = file++, i--;//挨个插入列表for (; i ; i--)insert_file_free(file++);
}//文件链表初始化
unsigned long file_table_init(unsigned long start, unsigned long end)
{first_file = NULL;return start;
}//获取空的文件链表点
struct file * get_empty_filp(void)
{int i;struct file * f;//不存在first_file,分配链表空间if (!first_file)grow_files();
repeat:for (f = first_file, i=0; i < nr_files; i++, f = f->f_next)//存在为记录的链表点,把该链表放到最后,并if (!f->f_count) {//从链表中移除remove_file_free(f);//链表点初始化为空memset(f,0,sizeof(*f));//把链表放到最后put_last_free(f);//记录使用数f->f_count = 1;//返回分配的链表点return f;}//如果没有找到空链表点,并且 链表数小于NR_FILE(1024);在生成链表点if (nr_files < NR_FILE) {//按页空间生成链表点grow_files();goto repeat;}//已经分配链表点大于NR_FILE(1024) 返回空return NULL;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day 16 包 json模块和os模块

目录 包什么是包包被导入时发生的三件事包和模块的区别相对路径和绝对路径json模块OS模块列出目录下所有文件重命名文件删除文件拼接路径判断是否为文件判断是否为文件夹判断文件是否存在新建文件夹包 什么是包 包就是里一个文件夹,里面存放了多个模块,并且包会自带__init__.py…

人的左右脑

右脑支配左手、左脚、左耳等人体的左半身神经和感觉&#xff0c;而左脑支配右半身的神经和感觉&#xff0c;正如实验一所表明的&#xff0c;右视野同左脑&#xff0c;左视野同右脑相连。因为语言中枢在左脑&#xff0c;所以左脑主要完成语言的、逻辑的、分析的、代数的思考认识…

DevExpress控件使用经验总结

DevExpress控件使用经验总结 DevExpress是一个比较有名的界面控件套件&#xff0c;提供了一系列的界面控件套件的DotNet界面控件。本文主要介绍我在使用DevExpress控件过程中&#xff0c;遇到或者发现的一些问题解决方案&#xff0c;或者也可以所示一些小的经验总结。总体来讲&…

struct task_struct 结构分析 \linux-1.0\linux\include\linux\sched.h

//任务机构体&#xff0c;大小大概1024字节 struct task_struct {/* these are hardcoded - dont touch */ //硬件代码 不可被修改volatile long state; //状态标志 /* -1 unrunnable, 0 runnable, >0 stopped */ long counter; //计数long priority; //…

mysql基础14(关于mysql数据库在没有主键情况下去除重复数据办法)

关于mysql数据库在没有主键情况下去除重复数据办法 约定 表名:mat 根据 cat 字段去重 新增加主键为 id 步骤 1、为mat新增一列自增主键 alter table mat add column id int(11) PRIMARY KEY AUTO_INCREMENT; 2、根据cat字段分组&#xff0c;找到数量大于1的&#xff0c;…

ctype.h,ctype.c 结构分析 \linux-1.0\linux\include\linux\ctype

\linux-1.0\linux\include\linux\ctype.h #ifndef _LINUX_CTYPE_H #define _LINUX_CTYPE_H#define _U 0x01 /* upper */ //大写字母 #define _L 0x02 /* lower */ //小写字母 #define _D 0x04 /* digit */ //数字 #define _C 0x08 /* cntrl */ //控制按键 #define _P 0x10 …

AaronYang WCF教程目录

原创&#xff0c;讲究实践 1. 那天有个小孩教我WCF[一][1/3] 基本搭建 阅读 2013年6月27日1:29:02 2. 那天有个小孩教我WCF[一][2/3] 基本竣工 阅读 2013年6月29日01:30:22 3. 那天有个小孩教我WCF[一][3/3] 第二种代理引用服务&#xff0c;小…

plsql中文乱码 显示问号

输入sql语句select * from V$NLS_PARAMETERS查看字符集&#xff0c;查看第一行value值是否为简体中文 解决方案&#xff1a; 新增环境变量 变量名&#xff1a; NLS_LANG 变量值: SIMPLIFIED CHINESE_CHINA.ZHS16GBK 重启PL/SQL 解决 转载于:https://www.cnblogs.com/tonyzt/p/1…

第二阶段团队绩效评分

第二阶段评分结果&#xff1a; 转载于:https://www.cnblogs.com/xczd/p/11068692.html

从最大似然到EM算法浅解(转载)

http://blog.csdn.net/zouxy09/article/details/8537620#comments转载于:https://www.cnblogs.com/zhihaowang/p/10128356.html

Shanghai Barcamp

早上起来晚了&#xff0c;晚睡晚起的习惯很不好&#xff01;总是有段时间会养成这样的不好习惯&#xff0c;过一段时间又会早睡早起。总结的说&#xff0c;去了还是有不少收获的&#xff0c;而且刚好就在前一段时间看了不少关于vc和初期投资培养方面的知识&#xff0c;结果这次…

我的虚拟机上网记录

联网时把虚拟机设置成共享IP模式就可以。如果要通过NFS链接开发板就选择桥接网络

随堂小测冲刺.第19天

我们小组的logo出来的&#xff0c;太酷了&#xff0c;不符合我的审美&#xff0c;本人表示无法接受。。。 还要谢谢李泽宇的女盆友&#xff0c;O(∩_∩)O哈哈~ 转载于:https://www.cnblogs.com/daisy99lijing/p/11024465.html

对象存储系统Swift官方文档

对象存储系统Swift技术详解&#xff1a;综述与概念 OpenStack Object Storage (Swift) 是用来创建冗余的、可扩展的对象存储&#xff08;引擎&#xff09;的开源软件。通过阅读Swift的技术文档&#xff0c;我们可以理解其中的设计的原理和实现的方法 。 Swift项目已经进展有两年…

MSBuild编译扩展

新增一个C#工程&#xff0c;用记事本打开工程文件&#xff08;.csproj结尾&#xff09;&#xff0c;滚动条拉到最后&#xff0c;大家可以看到一段如下的代码&#xff0c;其中<Target Name"BeforeBuild">和<Target Name"AfterBuild">大家根据名…

电影bt

电影&#xff1a; http://www.bttiantang.com/

修改2440里面的FriendlyARM

修改2440里面的FriendlyARM 在/etc/init.d文件夹里面有一个rcS文件&#xff0c;修改/bin/hostname FriendlyARM中的FriendlyARM即可 比如修改为/bin/hostname Solar posted on 2011-12-07 17:22 Neddy11 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/Neddy…

vs2008 下编译jrtplib-3.9.0成功

网址:http://blog.csdn.net/jid_223/article/details/6858663 jrtplib-3.9.0的编译&#xff0c;终于搞通了。网上搜集了很多资料&#xff0c;自己也调试了很久。 首先&#xff0c;jrtplib-3.9.0是什么不用多说吧&#xff0c;它是一个很牛的老外用C写的一个开源的RTP协议库&…

Eclipse安装VJET报错解决办法

2019独角兽企业重金招聘Python工程师标准>>> Eclipse在安装JS编辑器插件VJET时可能会出现以下错误 Cannot complete the install because one or more required items could not be found. Software being installed: VJET Java Based Dom Kit (Incubation) 0.10.0…

读书笔记_《海蒂》

海蒂是一个可爱、善良的小菇凉&#xff0c;很真诚、纯净的孩子。一般形容人长得好&#xff0c;只会用漂亮这个词&#xff0c;而如果一个人内心更加美好&#xff0c;那么就会用美丽来形容。海蒂这就是这样一个美丽的女孩儿。我想就算是在那种朴素的环境下&#xff0c;也很难出现…