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

📄 20.html

📁 linux 0.11中文版 有注释
💻 HTML
字号:
<html>
<head>
<title>fs/truncate.c</title>
<meta name='robots' content='noindex,nofollow'>
<meta name='generator' content='GLOBAL-5.4.1'>
</head>
<body text='#191970' bgcolor='#f5f5dc' vlink='gray'>
<a name='TOP'><h2><a href='../mains.html'>root</a>/<a href='../files/98.html'>fs</a>/truncate.c</h2>
<i><font color='green'>/* [&lt;][&gt;]<a href='#L14'>[^]</a><a href='#L81'>[v]</a>[top]<a href='#BOTTOM'>[bottom]</a><a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
<hr>
<h2>DEFINITIONS</h2>
This source file includes following definitions.
<ol>
<li><a href='#L14' title='Defined at 14.'>free_ind</a>
<li><a href='#L57' title='Defined at 57.'>free_dind</a>
<li><a href='#L81' title='Defined at 81.'>truncate</a>
</ol>
<hr>
<pre>
<a name='L1'><i><font color='green'>/*</font></i>
<a name='L2'><i><font color='green'>* linux/fs/truncate.c</font></i>
<a name='L3'><i><font color='green'>*</font></i>
<a name='L4'><i><font color='green'>* (C) 1991 Linus Torvalds</font></i>
<a name='L5'><i><font color='green'>*/</font></i>
<a name='L6'>
<a name='L7'><font color='darkred'>#include</font> &lt;<a href='36.html'>linux/sched.h</a>&gt;        <i><font color='green'>// 调度程序头文件,定义了任务结构task_struct、初始任务0 的数据,</font></i>
<a name='L8'><i><font color='green'>// 还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。</font></i>
<a name='L9'>
<a name='L10'><font color='darkred'>#include</font> &lt;<a href='43.html'>sys/stat.h</a>&gt;           <i><font color='green'>// 文件状态头文件。含有文件或文件系统状态结构stat{}和常量。</font></i>
<a name='L11'>
<a name='L12'><i><font color='green'>//// 释放一次间接块。</font></i>
<a name='L13'><b>static</b> <b>void</b>
<a name='L14'><a href='../R/466.html' title='Multiple refered from 2 places.'>free_ind</a> (<b>int</b> dev, <b>int</b> block)
<a name='L15'><font color='red'>{</font>
<a name='L16'>  <b>struct</b> buffer_head *bh;
<a name='L17'>  <b>unsigned</b> <b>short</b> *p;
<a name='L18'>  <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>;
<a name='L19'>
<a name='L20'><i><font color='green'>// 如果逻辑块号为0,则返回。</font></i>
<a name='L21'>  <b>if</b> (!block)
<a name='L22'>    <b>return</b>;
<a name='L23'><i><font color='green'>// 读取一次间接块,并释放其上表明使用的所有逻辑块,然后释放该一次间接块的缓冲区。</font></i>
<a name='L24'>  <b>if</b> (bh = <a href='../S/6.html#L397' title='Defined at 397 in fs/buffer.c.'>bread</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, block))
<a name='L25'>    <font color='red'>{</font>
<a name='L26'>      p = (<b>unsigned</b> <b>short</b> *) bh-&gt;b_data;        <i><font color='green'>// 指向数据缓冲区。</font></i>
<a name='L27'>      <b>for</b> (<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = 0; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> &lt; 512; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>++, p++)    <i><font color='green'>// 每个逻辑块上可有512 个块号。</font></i>
<a name='L28'>        <b>if</b> (*p)
<a name='L29'>          <a href='../S/4.html#L59' title='Defined at 59 in fs/bitmap.c.'>free_block</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, *p); <i><font color='green'>// 释放指定的逻辑块。</font></i>
<a name='L30'>      <a href='../S/6.html#L377' title='Defined at 377 in fs/buffer.c.'>brelse</a> (bh);              <i><font color='green'>// 释放缓冲区。</font></i>
<a name='L31'>    <font color='red'>}</font>
<a name='L32'><i><font color='green'>//其它字段</font></i>
<a name='L33'><i><font color='green'>//i_zone[0]</font></i>
<a name='L34'><i><font color='green'>//i_zone[1]</font></i>
<a name='L35'><i><font color='green'>//i_zone[2]</font></i>
<a name='L36'><i><font color='green'>//i_zone[3]</font></i>
<a name='L37'><i><font color='green'>//i_zone[4]</font></i>
<a name='L38'><i><font color='green'>//i_zone[5]</font></i>
<a name='L39'><i><font color='green'>//i_zone[6]</font></i>
<a name='L40'><i><font color='green'>//i 节点</font></i>
<a name='L41'><i><font color='green'>//直接块号</font></i>
<a name='L42'><i><font color='green'>//一次间接块</font></i>
<a name='L43'><i><font color='green'>//二次间接块</font></i>
<a name='L44'><i><font color='green'>//的一级块</font></i>
<a name='L45'><i><font color='green'>//二次间接块</font></i>
<a name='L46'><i><font color='green'>//的二级块</font></i>
<a name='L47'><i><font color='green'>//一次间接块号</font></i>
<a name='L48'><i><font color='green'>//二次间接块号</font></i>
<a name='L49'><i><font color='green'>//i_zone[7]</font></i>
<a name='L50'><i><font color='green'>//i_zone[8]</font></i>
<a name='L51'><i><font color='green'>// 释放设备上的一次间接块。</font></i>
<a name='L52'>  <a href='../S/4.html#L59' title='Defined at 59 in fs/bitmap.c.'>free_block</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, block);
<a name='L53'><font color='red'>}</font>
<a name='L54'>
<a name='L55'><i><font color='green'>//// 释放二次间接块。</font></i>
<a name='L56'><b>static</b> <b>void</b>
<a name='L57'><a href='../S/20.html#L96' title='Refered from 96 in fs/truncate.c.'>free_dind</a> (<b>int</b> dev, <b>int</b> block)
<a name='L58'><font color='red'>{</font>
<a name='L59'>  <b>struct</b> buffer_head *bh;
<a name='L60'>  <b>unsigned</b> <b>short</b> *p;
<a name='L61'>  <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>;
<a name='L62'>
<a name='L63'><i><font color='green'>// 如果逻辑块号为0,则返回。</font></i>
<a name='L64'>  <b>if</b> (!block)
<a name='L65'>    <b>return</b>;
<a name='L66'><i><font color='green'>// 读取二次间接块的一级块,并释放其上表明使用的所有逻辑块,然后释放该一级块的缓冲区。</font></i>
<a name='L67'>  <b>if</b> (bh = <a href='../S/6.html#L397' title='Defined at 397 in fs/buffer.c.'>bread</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, block))
<a name='L68'>    <font color='red'>{</font>
<a name='L69'>      p = (<b>unsigned</b> <b>short</b> *) bh-&gt;b_data;        <i><font color='green'>// 指向数据缓冲区。</font></i>
<a name='L70'>      <b>for</b> (<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = 0; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> &lt; 512; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>++, p++)    <i><font color='green'>// 每个逻辑块上可连接512 个二级块。</font></i>
<a name='L71'>        <b>if</b> (*p)
<a name='L72'>          <a href='../S/20.html#L14' title='Defined at 14 in fs/truncate.c.'>free_ind</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, *p);   <i><font color='green'>// 释放所有一次间接块。</font></i>
<a name='L73'>      <a href='../S/6.html#L377' title='Defined at 377 in fs/buffer.c.'>brelse</a> (bh);              <i><font color='green'>// 释放缓冲区。</font></i>
<a name='L74'>    <font color='red'>}</font>
<a name='L75'><i><font color='green'>// 最后释放设备上的二次间接块。</font></i>
<a name='L76'>  <a href='../S/4.html#L59' title='Defined at 59 in fs/bitmap.c.'>free_block</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, block);
<a name='L77'><font color='red'>}</font>
<a name='L78'>
<a name='L79'><i><font color='green'>//// 将节点对应的文件长度截为0,并释放占用的设备空间。</font></i>
<a name='L80'><b>void</b>
<a name='L81'><a href='../R/708.html' title='Multiple refered from 3 places.'>truncate</a> (<b>struct</b> m_inode *inode)
<a name='L82'><font color='red'>{</font>
<a name='L83'>  <b>int</b> <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>;
<a name='L84'>
<a name='L85'><i><font color='green'>// 如果不是常规文件或者是目录文件,则返回。</font></i>
<a name='L86'>  <b>if</b> (!(<a href='../S/43.html#L34' title='Defined at 34 in include/sys/stat.h.'>S_ISREG</a> (inode-&gt;i_mode) || <a href='../S/43.html#L35' title='Defined at 35 in include/sys/stat.h.'>S_ISDIR</a> (inode-&gt;i_mode)))
<a name='L87'>    <b>return</b>;
<a name='L88'><i><font color='green'>// 释放i 节点的7 个直接逻辑块,并将这7 个逻辑块项全置零。</font></i>
<a name='L89'>  <b>for</b> (<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> = 0; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a> &lt; 7; <a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>++)
<a name='L90'>    <b>if</b> (inode-&gt;i_zone[<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>])
<a name='L91'>      <font color='red'>{</font>                         <i><font color='green'>// 如果块号不为0,则释放之。</font></i>
<a name='L92'>        <a href='../S/4.html#L59' title='Defined at 59 in fs/bitmap.c.'>free_block</a> (inode-&gt;i_dev, inode-&gt;i_zone[<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>]);
<a name='L93'>        inode-&gt;i_zone[<a href='../D/839.html' title='Multiple defined in 4 places.'>i</a>] = 0;
<a name='L94'>      <font color='red'>}</font>
<a name='L95'>  <a href='../S/20.html#L14' title='Defined at 14 in fs/truncate.c.'>free_ind</a> (inode-&gt;i_dev, inode-&gt;i_zone[7]);    <i><font color='green'>// 释放一次间接块。</font></i>
<a name='L96'>  <a href='../S/20.html#L57' title='Defined at 57 in fs/truncate.c.'>free_dind</a> (inode-&gt;i_dev, inode-&gt;i_zone[8]);   <i><font color='green'>// 释放二次间接块。</font></i>
<a name='L97'>  inode-&gt;i_zone[7] = inode-&gt;i_zone[8] = 0;      <i><font color='green'>// 逻辑块项7、8 置零。</font></i>
<a name='L98'>  inode-&gt;i_size = 0;            <i><font color='green'>// 文件大小置零。</font></i>
<a name='L99'>  inode-&gt;i_dirt = 1;            <i><font color='green'>// 置节点已修改标志。</font></i>
<a name='L100'>  inode-&gt;i_mtime = inode-&gt;i_ctime = <a href='../S/36.html#L234' title='Defined at 234 in include/linux/sched.h.'>CURRENT_TIME</a>;       <i><font color='green'>// 重置文件和节点修改时间为当前时间。</font></i>
<a name='L101'><font color='red'>}</font>
</pre>
<hr>
<a name='BOTTOM'>
<i><font color='green'>/* [&lt;][&gt;]<a href='#L14'>[^]</a><a href='#L81'>[v]</a><a href='#TOP'>[top]</a>[bottom]<a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
</body>
</html>

⌨️ 快捷键说明

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