📄 044_fs_file_table_c.html
字号:
<html lang="zh-CN" xmlns:gdoc=""> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> <style type="text/css">/* default css */table { font-size: 1em; line-height: inherit;}div, address, ol, ul, li, option, select { margin-top: 0px; margin-bottom: 0px;}p { margin: 0px;}body { margin: 0px; padding: 0px; font-family: Verdana, sans-serif; font-size: 10pt; background-color: #ffffff;}h6 { font-size: 10pt }h5 { font-size: 11pt }h4 { font-size: 12pt }h3 { font-size: 13pt }h2 { font-size: 14pt }h1 { font-size: 16pt }blockquote {padding: 10px; border: 1px #DDD dashed }a img {border: 0}div.google_header, div.google_footer { position: relative; margin-top: 1em; margin-bottom: 1em;}/* end default css */ /* default print css */ @media print { body { padding: 0; margin: 0; } div.google_header, div.google_footer { display: block; min-height: 0; border: none; } div.google_header { flow: static(header); } /* used to insert page numbers */ div.google_header::before, div.google_footer::before { position: absolute; top: 0; } div.google_footer { flow: static(footer); } /* always consider this element at the start of the doc */ div#google_footer { flow: static(footer, start); } span.google_pagenumber { content: counter(page); } span.google_pagecount { content: counter(pages); } } @page { @top { content: flow(header); } @bottom { content: flow(footer); } } /* end default print css */ /* custom css *//* end custom css */ /* ui edited css */ body { font-family: Verdana; font-size: 10.0pt; line-height: normal; background-color: #ffffff; } .documentBG { background-color: #ffffff; } /* end ui edited css */</style> </head> <body revision="dcbsxfpf_32c4w6dddt:33"> <table align=center cellpadding=0 cellspacing=0 height=5716 width=802>
<tbody>
<tr>
<td height=5716 valign=top width=802>
<pre>2007-12-19<br><br>这个模块提供管理file的一些接口函数.<br>struct <font color=#000099><b>file </b></font>{<br> struct list_head f_list;<font color=#000099> <font color=#3333ff>/*组织: annon_list 或者 free_list ( 在使用中|不在使用中)*/</font></font><br> struct dentry *f_dentry;/<font color=#000099><font color=#3333ff>*组织</font></font>*/ <br> struct vfsmount *f_vfsmnt;/<font color=#000099><font color=#3333ff>*组织</font></font>*/<br> struct file_operations *f_op; /*feature*/<br> atoic_t f_count; /*feature*/ <br> unsigned int f_flags;<br> mode_t f_mode;<br> loff_t f_pos;<br> unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;<br> struct fown_struct f_owner;<br> unsigned int f_uid, f_gid;<br> int f_error;<br><br> unsigned long f_version;<br><br> /* needed for tty driver, and maybe others */<br> void *private_data;<br>};<br><br><font color=#3333ff>两个链表:</font><br>/* Here the new files go */<br>static LIST_HEAD(<b>anon_list</b>); <font color=#3333ff>/*匿名的....为啥叫匿名,看看dentry_open就知道了,正常的file会链接进<br> inode->i_sb->s_files*/</font><br>/* And here the free ones sit */<br>static LIST_HEAD(<b>free_list</b>);<br>/* public *and* exported. Not pretty! */<br>spinlock_t files_lock = SPIN_LOCK_UNLOCKED;<br><font color=#3333ff><br><br>有个分配和释放的几个接口函数:</font><br>struct file * get_empty_filp(void)<br>void fput(struct file * file)<br>struct file * fget(unsigned int fd)<br>void put_filp(struct file *file) <font color=#3333ff>/*不调用file->f_op->release(inode, file);*/</font><br><br>分配策略:<br> 预留10个(NR_RESERVED_FILES)file结构(即free_list中总有至少10个备用),然后总的数量不超过一个最大值(可配).说他简单是<br>因为,一旦分配就不再释放了,也不提供shrink操作....嘿嘿,有点像dquota.<br><br><br>void file_move(struct file *file, struct list_head *list) <br>void file_moveto(struct file *new, struct file *old)<br>int <font color=#000099><b>fs_may_remount_ro</b></font>(struct super_block *sb) <font color=#3333ff>/*如果要吧文件系统重新安装成read only,<br> 就需要看看有没有写操作在执行*/</font><br><br><br>如果还需要什么分析的话,..... 我晕倒....<br></pre>
</td>
</tr>
</tbody>
</table></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -