⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000046.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
&nbsp;registered&nbsp;<BR>·&nbsp;fs_flags&nbsp;-&nbsp;one&nbsp;or&nbsp;more&nbsp;(ORed)&nbsp;of&nbsp;the&nbsp;flags:&nbsp;FS_REQUIRES_DEV&nbsp;for&nbsp;filesyste&nbsp;<BR>ms&nbsp;that&nbsp;can&nbsp;only&nbsp;be&nbsp;mounted&nbsp;on&nbsp;a&nbsp;block&nbsp;device,&nbsp;FS_SINGLE&nbsp;for&nbsp;filesystems&nbsp;tha&nbsp;<BR>t&nbsp;can&nbsp;have&nbsp;only&nbsp;one&nbsp;superblock,&nbsp;FS_NOMOUNT&nbsp;for&nbsp;filesystems&nbsp;that&nbsp;cannot&nbsp;be&nbsp;mo&nbsp;<BR>unted&nbsp;from&nbsp;userspace&nbsp;by&nbsp;means&nbsp;of&nbsp;mount(2)&nbsp;system&nbsp;call&nbsp;-&nbsp;they&nbsp;can&nbsp;however&nbsp;be&nbsp;&nbsp;<BR>mounted&nbsp;internally&nbsp;using&nbsp;kern_mount()&nbsp;interface,&nbsp;e.g.&nbsp;pipefs&nbsp;<BR>·&nbsp;read_super&nbsp;-&nbsp;a&nbsp;pointer&nbsp;to&nbsp;the&nbsp;function&nbsp;that&nbsp;reads&nbsp;the&nbsp;super&nbsp;block&nbsp;during&nbsp;&nbsp;<BR>mount&nbsp;operation.&nbsp;This&nbsp;function&nbsp;is&nbsp;required&nbsp;-&nbsp;if&nbsp;it&nbsp;is&nbsp;not&nbsp;provided,&nbsp;mount&nbsp;op&nbsp;<BR>eration&nbsp;(whether&nbsp;from&nbsp;userspace&nbsp;or&nbsp;inkernel)&nbsp;will&nbsp;always&nbsp;fail&nbsp;except&nbsp;in&nbsp;FS_S&nbsp;<BR>INGLE&nbsp;case&nbsp;where&nbsp;it&nbsp;will&nbsp;Oops&nbsp;in&nbsp;get_sb_single()&nbsp;trying&nbsp;to&nbsp;dereference&nbsp;a&nbsp;NUL&nbsp;<BR>L&nbsp;pointer&nbsp;in&nbsp;fs_type-kern_mnt-mnt_sb&nbsp;with&nbsp;(fs_type-kern_mnt&nbsp;=&nbsp;NULL)&nbsp;<BR>·&nbsp;owner&nbsp;-&nbsp;pointer&nbsp;to&nbsp;the&nbsp;module&nbsp;that&nbsp;implements&nbsp;this&nbsp;filesystem.&nbsp;If&nbsp;the&nbsp;fil&nbsp;<BR>esystem&nbsp;is&nbsp;statically&nbsp;linked&nbsp;into&nbsp;the&nbsp;kernel&nbsp;then&nbsp;this&nbsp;is&nbsp;NULL.&nbsp;You&nbsp;don't&nbsp;ne&nbsp;<BR>ed&nbsp;to&nbsp;set&nbsp;this&nbsp;manually&nbsp;as&nbsp;the&nbsp;macro&nbsp;THIS_MODULE&nbsp;does&nbsp;the&nbsp;right&nbsp;thing&nbsp;automa&nbsp;<BR>tically&nbsp;<BR>·&nbsp;kern_mnt&nbsp;-&nbsp;for&nbsp;FS_SINGLE&nbsp;filesystems&nbsp;only.&nbsp;This&nbsp;is&nbsp;set&nbsp;by&nbsp;kern_mount().&nbsp;(&nbsp;<BR>TODO:&nbsp;kern_mount()&nbsp;should&nbsp;refuse&nbsp;to&nbsp;mount&nbsp;filesystems&nbsp;if&nbsp;FS_SINGLE&nbsp;isnot&nbsp;set&nbsp;<BR>)&nbsp;<BR>·&nbsp;next&nbsp;-&nbsp;linkage&nbsp;into&nbsp;singly-linked&nbsp;list&nbsp;headed&nbsp;by&nbsp;file_systems&nbsp;(see&nbsp;fs/sup&nbsp;<BR>er.c).&nbsp;The&nbsp;list&nbsp;is&nbsp;protected&nbsp;by&nbsp;the&nbsp;file_systems_lock&nbsp;read-write&nbsp;spinlock&nbsp;an&nbsp;<BR>d&nbsp;functions&nbsp;register/unregister_filesystem()&nbsp;modify&nbsp;it&nbsp;by&nbsp;linking&nbsp;and&nbsp;unlink&nbsp;<BR>ing&nbsp;the&nbsp;entry&nbsp;from&nbsp;the&nbsp;list&nbsp;<BR>The&nbsp;job&nbsp;of&nbsp;read_super&nbsp;function&nbsp;is&nbsp;to&nbsp;fill&nbsp;in&nbsp;the&nbsp;fields&nbsp;of&nbsp;the&nbsp;superblock,&nbsp;a&nbsp;<BR>llocate&nbsp;root&nbsp;inode&nbsp;and&nbsp;initialise&nbsp;any&nbsp;fs-private&nbsp;information&nbsp;associated&nbsp;with&nbsp;<BR>&nbsp;this&nbsp;mounted&nbsp;instance&nbsp;of&nbsp;the&nbsp;filesystem.&nbsp;So,&nbsp;typically&nbsp;the&nbsp;read_super()&nbsp;wou&nbsp;<BR>ld&nbsp;do:&nbsp;<BR>1.&nbsp;Read&nbsp;the&nbsp;superblock&nbsp;from&nbsp;the&nbsp;device&nbsp;specified&nbsp;via&nbsp;sb-s_dev&nbsp;argument&nbsp;using&nbsp;<BR>&nbsp;buffer&nbsp;cache&nbsp;bread()&nbsp;function.&nbsp;If&nbsp;it&nbsp;anticipates&nbsp;to&nbsp;read&nbsp;a&nbsp;few&nbsp;more&nbsp;subsequ&nbsp;<BR>ent&nbsp;metadata&nbsp;blocks&nbsp;immediately&nbsp;then&nbsp;it&nbsp;makes&nbsp;sense&nbsp;to&nbsp;use&nbsp;breada()&nbsp;to&nbsp;sched&nbsp;<BR>ule&nbsp;reading&nbsp;extra&nbsp;blocks&nbsp;asynchronously&nbsp;<BR>2.&nbsp;Verify&nbsp;that&nbsp;superblock&nbsp;contains&nbsp;the&nbsp;valid&nbsp;magic&nbsp;number&nbsp;and&nbsp;overall&nbsp;&quot;looks&nbsp;<BR>&quot;&nbsp;sane&nbsp;<BR>3.&nbsp;Initialise&nbsp;sb-s_op&nbsp;to&nbsp;point&nbsp;to&nbsp;'struct&nbsp;super_block_operations'&nbsp;structure.&nbsp;<BR>&nbsp;This&nbsp;structure&nbsp;contains&nbsp;filesystem-specific&nbsp;functions&nbsp;implementing&nbsp;operatio&nbsp;<BR>ns&nbsp;like&nbsp;&quot;read&nbsp;inode&quot;,&nbsp;&quot;delete&nbsp;inode&quot;&nbsp;etc&nbsp;<BR>4.&nbsp;Allocate&nbsp;root&nbsp;inode&nbsp;and&nbsp;root&nbsp;dentry&nbsp;using&nbsp;d_alloc_root()&nbsp;<BR>5.&nbsp;If&nbsp;the&nbsp;filesystem&nbsp;is&nbsp;not&nbsp;mounted&nbsp;read-only&nbsp;then&nbsp;set&nbsp;sb-s_dirt&nbsp;=&nbsp;1&nbsp;and&nbsp;mar&nbsp;<BR>k&nbsp;the&nbsp;buffer&nbsp;containing&nbsp;superblock&nbsp;dirty&nbsp;(TODO:&nbsp;why&nbsp;do&nbsp;we&nbsp;do&nbsp;this?&nbsp;I&nbsp;did&nbsp;it&nbsp;&nbsp;<BR>in&nbsp;BFS&nbsp;because&nbsp;MINIX&nbsp;did&nbsp;it...)&nbsp;<BR>3.3&nbsp;File&nbsp;Descriptor&nbsp;Management&nbsp;<BR>Under&nbsp;Linux&nbsp;there&nbsp;are&nbsp;several&nbsp;levels&nbsp;of&nbsp;indirection&nbsp;between&nbsp;user&nbsp;file&nbsp;descri&nbsp;<BR>ptor&nbsp;and&nbsp;the&nbsp;kernel&nbsp;inode&nbsp;structure.&nbsp;When&nbsp;a&nbsp;process&nbsp;makes&nbsp;open(2)&nbsp;system&nbsp;cal&nbsp;<BR>l,&nbsp;the&nbsp;kernel&nbsp;returns&nbsp;a&nbsp;small&nbsp;non-negative&nbsp;integer&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;for&nbsp;sub&nbsp;<BR>sequent&nbsp;io&nbsp;operations&nbsp;on&nbsp;this&nbsp;file.&nbsp;This&nbsp;integer&nbsp;is&nbsp;an&nbsp;index&nbsp;into&nbsp;an&nbsp;array&nbsp;o&nbsp;<BR>f&nbsp;pointers&nbsp;to&nbsp;'struct&nbsp;file'.&nbsp;Each&nbsp;file&nbsp;structure&nbsp;points&nbsp;to&nbsp;a&nbsp;dentry&nbsp;via&nbsp;file&nbsp;<BR>-f_dentry.&nbsp;And&nbsp;each&nbsp;dentry&nbsp;points&nbsp;to&nbsp;an&nbsp;inode&nbsp;via&nbsp;dentry-d_inode.&nbsp;<BR>Each&nbsp;task&nbsp;contains&nbsp;a&nbsp;field&nbsp;tsk-files&nbsp;which&nbsp;is&nbsp;a&nbsp;pointer&nbsp;to&nbsp;'struct&nbsp;files_str&nbsp;<BR>uct'&nbsp;defined&nbsp;in&nbsp;include/linux/sched.h:&nbsp;<BR>/*&nbsp;<BR>&nbsp;*&nbsp;Open&nbsp;file&nbsp;table&nbsp;structure&nbsp;<BR>&nbsp;*/&nbsp;<BR>struct&nbsp;files_struct&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;atomic_t&nbsp;count;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rwlock_t&nbsp;file_lock;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;max_fds;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;max_fdset;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;next_fd;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;file&nbsp;**&nbsp;fd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;current&nbsp;fd&nbsp;array&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_set&nbsp;*close_on_exec;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_set&nbsp;*open_fds;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_set&nbsp;close_on_exec_init;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_set&nbsp;open_fds_init;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;file&nbsp;*&nbsp;fd_array[NR_OPEN_DEFAULT];&nbsp;<BR>};&nbsp;<BR>The&nbsp;file-count&nbsp;is&nbsp;a&nbsp;reference&nbsp;count,&nbsp;incremented&nbsp;by&nbsp;get_file()&nbsp;(usually&nbsp;call&nbsp;<BR>ed&nbsp;by&nbsp;fget())&nbsp;and&nbsp;decremented&nbsp;by&nbsp;fput()&nbsp;and&nbsp;by&nbsp;put_filp().&nbsp;The&nbsp;difference&nbsp;be&nbsp;<BR>tween&nbsp;fput()&nbsp;and&nbsp;put_filp()&nbsp;is&nbsp;that&nbsp;fput()&nbsp;does&nbsp;more&nbsp;work&nbsp;usually&nbsp;needed&nbsp;for&nbsp;<BR>&nbsp;regular&nbsp;files,&nbsp;such&nbsp;as&nbsp;releasing&nbsp;flock&nbsp;locks,&nbsp;releasing&nbsp;dentry&nbsp;etc&nbsp;while&nbsp;pu&nbsp;<BR>t_filp()&nbsp;is&nbsp;only&nbsp;manipulating&nbsp;file&nbsp;table&nbsp;structures,&nbsp;i.e.&nbsp;decrements&nbsp;the&nbsp;cou&nbsp;<BR>nt,&nbsp;removes&nbsp;the&nbsp;file&nbsp;from&nbsp;the&nbsp;anon_list&nbsp;and&nbsp;adds&nbsp;it&nbsp;to&nbsp;the&nbsp;free_list,&nbsp;under&nbsp;&nbsp;<BR>protection&nbsp;of&nbsp;files_lock&nbsp;spinlock.&nbsp;<BR>The&nbsp;tsk-files&nbsp;can&nbsp;be&nbsp;shared&nbsp;between&nbsp;parent&nbsp;and&nbsp;child&nbsp;if&nbsp;the&nbsp;child&nbsp;thread&nbsp;was&nbsp;<BR>&nbsp;created&nbsp;using&nbsp;clone()&nbsp;system&nbsp;call&nbsp;with&nbsp;CLONE_FILES&nbsp;set&nbsp;in&nbsp;the&nbsp;clone&nbsp;flags&nbsp;a&nbsp;<BR>rgument.&nbsp;This&nbsp;can&nbsp;be&nbsp;seen&nbsp;in&nbsp;kernel/fork.c:copy_files()&nbsp;(called&nbsp;by&nbsp;do_fork()&nbsp;<BR>)&nbsp;which&nbsp;only&nbsp;increments&nbsp;the&nbsp;file-count&nbsp;if&nbsp;CLONE_FILES&nbsp;is&nbsp;set&nbsp;instead&nbsp;of&nbsp;the&nbsp;&nbsp;<BR>usual&nbsp;copying&nbsp;file&nbsp;descriptor&nbsp;table&nbsp;in&nbsp;time-honoured&nbsp;tradition&nbsp;of&nbsp;classical&nbsp;&nbsp;<BR>UNIX&nbsp;fork(2).&nbsp;<BR>When&nbsp;a&nbsp;file&nbsp;is&nbsp;opened&nbsp;the&nbsp;file&nbsp;structure&nbsp;allocated&nbsp;for&nbsp;it&nbsp;is&nbsp;installed&nbsp;into&nbsp;&nbsp;<BR>current-files-fd[fd]&nbsp;slot&nbsp;and&nbsp;a&nbsp;'fd'&nbsp;bit&nbsp;is&nbsp;set&nbsp;in&nbsp;the&nbsp;bitmap&nbsp;current-files-&nbsp;<BR>open_fds.&nbsp;All&nbsp;this&nbsp;is&nbsp;done&nbsp;under&nbsp;the&nbsp;write&nbsp;protection&nbsp;of&nbsp;current-files-file_&nbsp;<BR>lock&nbsp;read-write&nbsp;spinlock.&nbsp;When&nbsp;the&nbsp;descriptor&nbsp;is&nbsp;closed&nbsp;a&nbsp;'fd'&nbsp;bit&nbsp;is&nbsp;cleare&nbsp;<BR>d&nbsp;in&nbsp;current-files-open_fds&nbsp;and&nbsp;current-files-next_fd&nbsp;is&nbsp;set&nbsp;equal&nbsp;to&nbsp;'fd'&nbsp;a&nbsp;<BR>s&nbsp;a&nbsp;hint&nbsp;for&nbsp;finding&nbsp;the&nbsp;first&nbsp;unused&nbsp;descriptor&nbsp;next&nbsp;time&nbsp;this&nbsp;process&nbsp;want&nbsp;<BR>s&nbsp;to&nbsp;open&nbsp;a&nbsp;file.&nbsp;<BR>3.4&nbsp;File&nbsp;Structure&nbsp;Management&nbsp;<BR>The&nbsp;file&nbsp;structure&nbsp;is&nbsp;declared&nbsp;in&nbsp;include/linux/fs.h:&nbsp;<BR>struct&nbsp;fown_struct&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;pid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;pid&nbsp;or&nbsp;-pgrp&nbsp;where&nbsp;SIGIO&nbsp;should&nbsp;be&nbsp;sent&nbsp;*&nbsp;<BR>/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uid_t&nbsp;uid,&nbsp;euid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;uid/euid&nbsp;of&nbsp;process&nbsp;setting&nbsp;the&nbsp;owner&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;signum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;posix.1b&nbsp;rt&nbsp;signal&nbsp;to&nbsp;be&nbsp;delivered&nbsp;on&nbsp;IO&nbsp;&nbsp;<BR>*/&nbsp;<BR>};&nbsp;<BR>struct&nbsp;file&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;list_head&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_list;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*f_dentry;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;vfsmount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*f_vfsmnt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;file_operations&nbsp;&nbsp;*f_op;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;atomic_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_count;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_flags;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_mode;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loff_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_pos;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_reada,&nbsp;f_ramax,&nbsp;f_raend,&nbsp;f_ralen,&nbsp;f_rawin;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;fown_struct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_owner;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_uid,&nbsp;f_gid;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_error;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_version;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;needed&nbsp;for&nbsp;tty&nbsp;driver,&nbsp;and&nbsp;maybe&nbsp;others&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*private_data;&nbsp;<BR>};&nbsp;<BR>Let&nbsp;us&nbsp;look&nbsp;at&nbsp;the&nbsp;various&nbsp;fields&nbsp;of&nbsp;'struct&nbsp;file':&nbsp;<BR>1.&nbsp;f_list&nbsp;-&nbsp;this&nbsp;field&nbsp;links&nbsp;file&nbsp;structure&nbsp;on&nbsp;one&nbsp;(and&nbsp;only&nbsp;one)&nbsp;of&nbsp;the&nbsp;lis&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -