Files
oldlinux-website/Book-Lite/code-list/html/P12-6.html
2024-02-19 01:11:57 -05:00

6697 lines
307 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=Generator content="Microsoft Word 14 (filtered)">
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Helvetica;
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:Courier;
panose-1:2 7 4 9 2 2 5 2 4 4;}
@font-face
{font-family:"Tms Rmn";
panose-1:2 2 6 3 4 5 5 2 3 4;}
@font-face
{font-family:Helv;
panose-1:2 11 6 4 2 2 2 3 2 4;}
@font-face
{font-family:"New York";
panose-1:2 4 5 3 6 5 6 2 3 4;}
@font-face
{font-family:System;
panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"MS Mincho";
panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
{font-family:Batang;
panose-1:2 3 6 0 0 1 1 1 1 1;}
@font-face
{font-family:ËÎÌå;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:PMingLiU;
panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
{font-family:"MS Gothic";
panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
{font-family:Dotum;
panose-1:2 11 6 0 0 1 1 1 1 1;}
@font-face
{font-family:ºÚÌå;
panose-1:2 1 6 9 6 1 1 1 1 1;}
@font-face
{font-family:MingLiU;
panose-1:2 2 5 9 0 0 0 0 0 0;}
@font-face
{font-family:Mincho;
panose-1:2 2 6 9 4 3 5 8 3 5;}
@font-face
{font-family:Gulim;
panose-1:2 11 6 0 0 1 1 1 1 1;}
@font-face
{font-family:Century;
panose-1:2 4 6 4 5 5 5 2 3 4;}
@font-face
{font-family:"Angsana New";
panose-1:2 2 6 3 5 4 5 2 3 4;}
@font-face
{font-family:"Cordia New";
panose-1:2 11 3 4 2 2 2 2 2 4;}
@font-face
{font-family:Mangal;
panose-1:2 4 5 3 5 2 3 3 2 2;}
@font-face
{font-family:Latha;
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:Sylfaen;
panose-1:1 10 5 2 5 3 6 3 3 3;}
@font-face
{font-family:Vrinda;
panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
{font-family:Raavi;
panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
{font-family:Shruti;
panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
{font-family:Sendnya;
panose-1:0 0 4 0 0 0 0 0 0 0;}
@font-face
{font-family:Gautami;
panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
{font-family:Tunga;
panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
{font-family:"Estrangelo Edessa";
panose-1:3 8 6 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:"Arial Unicode MS";
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:Cambria;
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:·½ÕýС±êËμòÌå;}
@font-face
{font-family:"\@ºÚÌå";
panose-1:2 1 6 9 6 1 1 1 1 1;}
@font-face
{font-family:"\@ËÎÌå";
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"\@·½ÕýС±êËμòÌå";}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
h1
{mso-style-link:"±êÌâ 1 Char";
margin-top:17.0pt;
margin-right:0cm;
margin-bottom:16.5pt;
margin-left:7.2pt;
text-align:center;
text-indent:-7.2pt;
page-break-after:avoid;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
h2
{mso-style-link:"±êÌâ 2 Char";
margin-top:13.0pt;
margin-right:0cm;
margin-bottom:13.0pt;
margin-left:0cm;
text-align:justify;
text-justify:inter-ideograph;
text-indent:0cm;
page-break-after:avoid;
font-size:16.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
h3
{mso-style-link:"±êÌâ 3 Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:0cm;
page-break-after:avoid;
font-size:14.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
h4
{mso-style-link:"±êÌâ 4 Char";
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:28.8pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-28.8pt;
page-break-after:avoid;
font-size:12.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
h5
{mso-style-link:"±êÌâ 5 Char";
margin-top:14.0pt;
margin-right:0cm;
margin-bottom:14.5pt;
margin-left:36.0pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-36.0pt;
line-height:156%;
page-break-after:avoid;
font-size:14.0pt;
font-family:ËÎÌå;
font-weight:bold;}
h6
{mso-style-link:"±êÌâ 6 Char";
margin-top:12.0pt;
margin-right:0cm;
margin-bottom:3.2pt;
margin-left:43.2pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-43.2pt;
line-height:133%;
page-break-after:avoid;
font-size:12.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
p.MsoHeading7, li.MsoHeading7, div.MsoHeading7
{mso-style-link:"±êÌâ 7 Char";
margin-top:12.0pt;
margin-right:0cm;
margin-bottom:3.2pt;
margin-left:50.4pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-50.4pt;
line-height:133%;
page-break-after:avoid;
font-size:12.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.MsoHeading8, li.MsoHeading8, div.MsoHeading8
{mso-style-link:"±êÌâ 8 Char";
margin-top:12.0pt;
margin-right:0cm;
margin-bottom:3.2pt;
margin-left:57.6pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-72.0pt;
line-height:133%;
page-break-after:avoid;
font-size:12.0pt;
font-family:"Arial","sans-serif";}
p.MsoHeading9, li.MsoHeading9, div.MsoHeading9
{mso-style-link:"±êÌâ 9 Char";
margin-top:12.0pt;
margin-right:0cm;
margin-bottom:3.2pt;
margin-left:64.8pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-79.2pt;
line-height:133%;
page-break-after:avoid;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.MsoIndex1, li.MsoIndex1, div.MsoIndex1
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:10.5pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoIndex2, li.MsoIndex2, div.MsoIndex2
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoIndex3, li.MsoIndex3, div.MsoIndex3
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:31.5pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoIndex4, li.MsoIndex4, div.MsoIndex4
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:42.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoIndex5, li.MsoIndex5, div.MsoIndex5
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:52.5pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoIndex6, li.MsoIndex6, div.MsoIndex6
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:63.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoIndex7, li.MsoIndex7, div.MsoIndex7
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:73.5pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoIndex8, li.MsoIndex8, div.MsoIndex8
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:84.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoIndex9, li.MsoIndex9, div.MsoIndex9
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:94.5pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-10.5pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoToc1, li.MsoToc1, div.MsoToc1
{margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;
font-weight:bold;}
p.MsoToc2, li.MsoToc2, div.MsoToc2
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoToc3, li.MsoToc3, div.MsoToc3
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:42.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoToc4, li.MsoToc4, div.MsoToc4
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:31.5pt;
margin-bottom:.0001pt;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoToc5, li.MsoToc5, div.MsoToc5
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:42.0pt;
margin-bottom:.0001pt;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoToc6, li.MsoToc6, div.MsoToc6
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:52.5pt;
margin-bottom:.0001pt;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoToc7, li.MsoToc7, div.MsoToc7
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:63.0pt;
margin-bottom:.0001pt;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoToc8, li.MsoToc8, div.MsoToc8
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:73.5pt;
margin-bottom:.0001pt;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoToc9, li.MsoToc9, div.MsoToc9
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:84.0pt;
margin-bottom:.0001pt;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
{mso-style-link:"½Å×¢Îı¾ Char";
margin:0cm;
margin-bottom:.0001pt;
layout-grid-mode:char;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoCommentText, li.MsoCommentText, div.MsoCommentText
{mso-style-link:"Åú×¢ÎÄ×Ö Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoHeader, li.MsoHeader, div.MsoHeader
{mso-style-link:"ҳü Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
layout-grid-mode:char;
border:none;
padding:0cm;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoFooter, li.MsoFooter, div.MsoFooter
{mso-style-link:"Ò³½Å Char";
margin:0cm;
margin-bottom:.0001pt;
layout-grid-mode:char;
font-size:9.0pt;
font-family:ËÎÌå;}
p.MsoIndexHeading, li.MsoIndexHeading, div.MsoIndexHeading
{mso-style-name:"Ë÷Òý±êÌâ\,Ë÷ÒýÀàÄ¿\,Ë÷ÒýÀàÄ¿1\,Ë÷ÒýÀàÄ¿2";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoCaption, li.MsoCaption, div.MsoCaption
{margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.MsoTof, li.MsoTof, div.MsoTof
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:42.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-21.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
span.MsoFootnoteReference
{vertical-align:super;}
p.MsoList, li.MsoList, div.MsoList
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoList2, li.MsoList2, div.MsoList2
{margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoList4, li.MsoList4, div.MsoList4
{margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.MsoDate, li.MsoDate, div.MsoDate
{mso-style-link:"ÈÕÆÚ Char";
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:5.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
a:link, span.MsoHyperlink
{mso-style-name:"³¬Á´½Ó\,³¬¼¶Á´½Ó";
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;}
p
{mso-style-name:"ÆÕͨ\(ÍøÕ¾\)\,ÆÕͨ \(Web\)\,ÆÕͨ \(Web\)1\,ÆÕͨ \(Web\)2\,ÆÕͨ \(Web\)3";
margin-right:0cm;
margin-left:0cm;
font-size:12.0pt;
font-family:ËÎÌå;}
pre
{mso-style-name:"HTML Ô¤Éè¸ñʽ\,HTML Ô¤Ïȸñʽ»¯\,HTML Ô¤Ïȸñʽ»¯1\,HTML Ô¤Ïȸñʽ»¯2\,HTML Ô¤Ïȸñʽ»¯3";
mso-style-link:"HTML Ô¤Éè¸ñʽ Char\,HTML Ô¤Ïȸñʽ»¯ Char\,HTML Ô¤Ïȸñʽ»¯1 Char\,HTML Ô¤Ïȸñʽ»¯2 Char\,HTML Ô¤Ïȸñʽ»¯3 Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:ËÎÌå;}
tt
{font-family:ºÚÌå;}
p.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject
{mso-style-link:"Åú×¢Ö÷Ìâ Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:10.5pt;
font-family:ËÎÌå;
font-weight:bold;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-link:"Åú×¢¿òÎı¾ Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:9.0pt;
font-family:ËÎÌå;}
p.1, li.1, div.1
{mso-style-name:Ñùʽ1;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.a, li.a, div.a
{mso-style-name:´úÂë³ÌÐò;
mso-style-link:"´úÂë³ÌÐò Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:ËÎÌå;}
span.Char
{mso-style-name:"´úÂë³ÌÐò Char";
mso-style-link:´úÂë³ÌÐò;
font-family:ËÎÌå;}
p.a0, li.a0, div.a0
{mso-style-name:ͼ˵Ã÷;
mso-style-link:"ͼ˵Ã÷ Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char0
{mso-style-name:"ͼ˵Ã÷ Char";
mso-style-link:ͼ˵Ã÷;
font-family:ËÎÌå;}
p.0, li.0, div.0
{mso-style-name:·âÃæ0;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:36.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.10, li.10, div.10
{mso-style-name:·âÃæ1;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:18.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.11, li.11, div.11
{mso-style-name:·Ç±êÌâ1;
margin-top:7.8pt;
margin-right:0cm;
margin-bottom:7.8pt;
margin-left:0cm;
text-align:center;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.a1, li.a1, div.a1
{mso-style-name:Îı¾¾ÓÖÐ;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.3CharChar, li.3CharChar, div.3CharChar
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char";
mso-style-link:"ͼÖÐÎÄ×Ö3 Char Char Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
line-height:9.0pt;
font-size:8.0pt;
font-family:ËÎÌå;}
span.3CharCharChar
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char Char";
mso-style-link:"ͼÖÐÎÄ×Ö3 Char Char";
font-family:ËÎÌå;}
p.post, li.post, div.post
{mso-style-name:Óʼþpost;
margin:0cm;
margin-bottom:.0001pt;
text-align:right;
line-height:11.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.3, li.3, div.3
{mso-style-name:ͼÖÐ×ÖÌå3;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.3CharChar1CharCharChar
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char1 Char Char Char";
font-family:ËÎÌå;}
span.3CharChar1CharChar
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char1 Char Char";
font-family:ËÎÌå;}
p.5Char, li.5Char, div.5Char
{mso-style-name:"ͼÖÐÎÄ×Ö5ºÅ Char";
mso-style-link:"ͼÖÐÎÄ×Ö5ºÅ Char Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
span.5CharChar
{mso-style-name:"ͼÖÐÎÄ×Ö5ºÅ Char Char";
mso-style-link:"ͼÖÐÎÄ×Ö5ºÅ Char";
font-family:ËÎÌå;}
p.5CharChar0, li.5CharChar0, div.5CharChar0
{mso-style-name:"ͼÖÐÎÄ×ÖС5ºÅ Char Char";
mso-style-link:"ͼÖÐÎÄ×ÖС5ºÅ Char Char Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
span.5CharCharChar
{mso-style-name:"ͼÖÐÎÄ×ÖС5ºÅ Char Char Char";
mso-style-link:"ͼÖÐÎÄ×ÖС5ºÅ Char Char";
font-family:ËÎÌå;}
p.5Char0, li.5Char0, div.5Char0
{mso-style-name:"ͼÖÐÎÄ×ÖС5ºÅ Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.5, li.5, div.5
{mso-style-name:ͼÖÐÎÄ×ÖС5ºÅ;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
layout-grid-mode:char;
font-size:9.0pt;
font-family:ËÎÌå;}
p.2, li.2, div.2
{mso-style-name:´úÂë³ÌÐò2;
margin:0cm;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:ËÎÌå;}
p.20, li.20, div.20
{mso-style-name:ͼ˵Ã÷2;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.21, li.21, div.21
{mso-style-name:Îı¾¾ÓÖÐ2;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.3CharCharCharCharChar, li.3CharCharCharCharChar, div.3CharCharCharCharChar
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char Char Char Char";
mso-style-link:"ͼÖÐÎÄ×Ö3 Char Char Char Char Char Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
line-height:9.0pt;
font-size:8.0pt;
font-family:ËÎÌå;}
span.3CharCharCharCharCharChar
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char Char Char Char Char";
mso-style-link:"ͼÖÐÎÄ×Ö3 Char Char Char Char Char";
font-family:ËÎÌå;}
p.a2, li.a2, div.a2
{mso-style-name:ͼ¾ÓÖÐ;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.110, li.110, div.110
{mso-style-name:"Ñùʽ ±êÌâ 1 + ¾ÓÖÐ1";
margin-right:0cm;
margin-left:0cm;
text-align:center;
page-break-after:avoid;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
span.1Char
{mso-style-name:"±êÌâ 1 Char";
mso-style-link:"±êÌâ 1";
font-weight:bold;}
p.22, li.22, div.22
{mso-style-name:"Ñùʽ Áбí 2 + ¾ÓÖÐ";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.23, li.23, div.23
{mso-style-name:Áбí2;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.50, li.50, div.50
{mso-style-name:ͼÖÐÎÄ×Ö5ºÅ;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.111, li.111, div.111
{mso-style-name:Ñùʽ11;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.12, li.12, div.12
{mso-style-name:´úÂë³ÌÐò1;
margin:0cm;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:ËÎÌå;}
p.13, li.13, div.13
{mso-style-name:ͼ˵Ã÷1;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.01, li.01, div.01
{mso-style-name:·âÃæ01;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:36.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.112, li.112, div.112
{mso-style-name:·âÃæ11;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:18.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.113, li.113, div.113
{mso-style-name:·Ç±êÌâ11;
margin-top:7.8pt;
margin-right:0cm;
margin-bottom:7.8pt;
margin-left:0cm;
text-align:center;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.14, li.14, div.14
{mso-style-name:Îı¾¾ÓÖÐ1;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.3Char1, li.3Char1, div.3Char1
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char1";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
line-height:9.0pt;
font-size:8.0pt;
font-family:ËÎÌå;}
p.post1, li.post1, div.post1
{mso-style-name:Óʼþpost1;
margin:0cm;
margin-bottom:.0001pt;
text-align:right;
line-height:11.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.31, li.31, div.31
{mso-style-name:ͼÖÐ×ÖÌå31;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.5Char1, li.5Char1, div.5Char1
{mso-style-name:"ͼÖÐÎÄ×Ö5ºÅ Char1";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.5CharChar1, li.5CharChar1, div.5CharChar1
{mso-style-name:"ͼÖÐÎÄ×ÖС5ºÅ Char Char1";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.5Char10, li.5Char10, div.5Char10
{mso-style-name:"ͼÖÐÎÄ×ÖС5ºÅ Char1";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.51, li.51, div.51
{mso-style-name:ͼÖÐÎÄ×ÖС5ºÅ1;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.120, li.120, div.120
{mso-style-name:Ñùʽ12;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.02, li.02, div.02
{mso-style-name:·âÃæ02;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:36.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.121, li.121, div.121
{mso-style-name:·âÃæ12;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:18.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.122, li.122, div.122
{mso-style-name:·Ç±êÌâ12;
margin-top:7.8pt;
margin-right:0cm;
margin-bottom:7.8pt;
margin-left:0cm;
text-align:center;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.3Char2, li.3Char2, div.3Char2
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char2";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
line-height:9.0pt;
font-size:8.0pt;
font-family:ËÎÌå;}
p.post2, li.post2, div.post2
{mso-style-name:Óʼþpost2;
margin:0cm;
margin-bottom:.0001pt;
text-align:right;
line-height:11.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.32, li.32, div.32
{mso-style-name:ͼÖÐ×ÖÌå32;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.5Char2, li.5Char2, div.5Char2
{mso-style-name:"ͼÖÐÎÄ×ÖС5ºÅ Char2";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.52, li.52, div.52
{mso-style-name:ͼÖÐÎÄ×ÖС5ºÅ2;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.3CharCharCharChar, li.3CharCharCharChar, div.3CharCharCharChar
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char Char Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
line-height:9.0pt;
font-size:8.0pt;
font-family:ËÎÌå;}
p.130, li.130, div.130
{mso-style-name:Ñùʽ13;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.30, li.30, div.30
{mso-style-name:´úÂë³ÌÐò3;
margin:0cm;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:ËÎÌå;}
p.03, li.03, div.03
{mso-style-name:·âÃæ03;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:36.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.131, li.131, div.131
{mso-style-name:·âÃæ13;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:18.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.132, li.132, div.132
{mso-style-name:·Ç±êÌâ13;
margin-top:7.8pt;
margin-right:0cm;
margin-bottom:7.8pt;
margin-left:0cm;
text-align:center;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.33, li.33, div.33
{mso-style-name:Îı¾¾ÓÖÐ3;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.3Char3, li.3Char3, div.3Char3
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char3";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
line-height:9.0pt;
font-size:8.0pt;
font-family:ËÎÌå;}
p.post3, li.post3, div.post3
{mso-style-name:Óʼþpost3;
margin:0cm;
margin-bottom:.0001pt;
text-align:right;
line-height:11.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.330, li.330, div.330
{mso-style-name:ͼÖÐ×ÖÌå33;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.5Char20, li.5Char20, div.5Char20
{mso-style-name:"ͼÖÐÎÄ×Ö5ºÅ Char2";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.5CharChar2, li.5CharChar2, div.5CharChar2
{mso-style-name:"ͼÖÐÎÄ×ÖС5ºÅ Char Char2";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.5Char3, li.5Char3, div.5Char3
{mso-style-name:"ͼÖÐÎÄ×ÖС5ºÅ Char3";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.53, li.53, div.53
{mso-style-name:ͼÖÐÎÄ×ÖС5ºÅ3;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:9.0pt;
font-family:ËÎÌå;}
p.3Char, li.3Char, div.3Char
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char";
mso-style-link:"ͼÖÐÎÄ×Ö3 Char Char5";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
line-height:9.0pt;
font-size:8.0pt;
font-family:ËÎÌå;}
span.3CharChar5
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char5";
mso-style-link:"ͼÖÐÎÄ×Ö3 Char";
font-family:ËÎÌå;}
p.54, li.54, div.54
{mso-style-name:ͼÖÐÎÄ×ÖС5½ôÃÜ;
margin:0cm;
margin-bottom:.0001pt;
line-height:9.0pt;
text-autospace:ideograph-numeric;
font-size:9.0pt;
font-family:ËÎÌå;}
p.24, li.24, div.24
{mso-style-name:¾ÓÖÐ2ºÅ´ÖËÎÌå;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.15, li.15, div.15
{mso-style-name:"Ñùʽ ±êÌâ 1 + ¾ÓÖÐ";
margin-top:17.0pt;
margin-right:0cm;
margin-bottom:16.5pt;
margin-left:0cm;
text-align:center;
page-break-after:avoid;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.25, li.25, div.25
{mso-style-name:"Ñùʽ ±êÌâ 2 + Ðоà\: µ¥±¶Ðоà";
margin-top:13.0pt;
margin-right:0cm;
margin-bottom:13.0pt;
margin-left:28.9pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-28.9pt;
page-break-after:avoid;
font-size:16.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
span.2Char
{mso-style-name:"±êÌâ 2 Char";
mso-style-link:"±êÌâ 2";
font-family:"Arial","sans-serif";
font-weight:bold;}
p.34, li.34, div.34
{mso-style-name:Áбí3;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.35, li.35, div.35
{mso-style-name:±í3;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.4, li.4, div.4
{mso-style-name:ͼ˵Ã÷4;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.40, li.40, div.40
{mso-style-name:Áбí4;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.0pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.41, li.41, div.41
{mso-style-name:±í4;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.55, li.55, div.55
{mso-style-name:ͼ˵Ã÷5;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.56, li.56, div.56
{mso-style-name:Áбí5;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.57, li.57, div.57
{mso-style-name:±í5;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.6, li.6, div.6
{mso-style-name:Áбí6;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.60, li.60, div.60
{mso-style-name:±í6;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.61, li.61, div.61
{mso-style-name:ͼ˵Ã÷6;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.7, li.7, div.7
{mso-style-name:Áбí7;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.70, li.70, div.70
{mso-style-name:ͼ˵Ã÷7;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.71, li.71, div.71
{mso-style-name:±í7;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.8, li.8, div.8
{mso-style-name:Áбí8;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.9, li.9, div.9
{mso-style-name:Áбí9;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.90, li.90, div.90
{mso-style-name:ͼ˵Ã÷9;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.100, li.100, div.100
{mso-style-name:Áбí10;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.101, li.101, div.101
{mso-style-name:ͼ˵Ã÷10;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.114, li.114, div.114
{mso-style-name:Áбí11;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.115, li.115, div.115
{mso-style-name:ͼ˵Ã÷11;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.116, li.116, div.116
{mso-style-name:±í11;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.123, li.123, div.123
{mso-style-name:Áбí12;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.124, li.124, div.124
{mso-style-name:ͼ˵Ã÷12;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.133, li.133, div.133
{mso-style-name:ͼ˵Ã÷13;
mso-style-link:"ͼ˵Ã÷13 Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
span.13Char
{mso-style-name:"ͼ˵Ã÷13 Char";
mso-style-link:ͼ˵Ã÷13;
font-family:ËÎÌå;}
p.134, li.134, div.134
{mso-style-name:Áбí13;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.26, li.26, div.26
{mso-style-name:¸½Â¼2;
margin-top:13.0pt;
margin-right:0cm;
margin-bottom:13.0pt;
margin-left:0cm;
text-align:justify;
text-justify:inter-ideograph;
page-break-after:avoid;
font-size:16.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
p.36, li.36, div.36
{mso-style-name:¸½Â¼3;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
page-break-after:avoid;
font-size:14.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
span.3Char0
{mso-style-name:"±êÌâ 3 Char";
mso-style-link:"±êÌâ 3";
font-family:"Arial","sans-serif";
font-weight:bold;}
p.16, li.16, div.16
{mso-style-name:¸½Â¼1;
margin-top:17.0pt;
margin-right:0cm;
margin-bottom:16.5pt;
margin-left:0cm;
text-align:center;
page-break-after:avoid;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.17, li.17, div.17
{mso-style-name:¸½Â¼±í1;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.42, li.42, div.42
{mso-style-name:¸½Â¼4;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
page-break-after:avoid;
font-size:12.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
span.4Char
{mso-style-name:"±êÌâ 4 Char";
mso-style-link:"±êÌâ 4";
font-family:"Arial","sans-serif";
font-weight:bold;}
p.a3, li.a3, div.a3
{mso-style-name:¸½Â¼Í¼ËµÃ÷;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.27, li.27, div.27
{mso-style-name:Ðò±êÌâ2;
margin-top:13.0pt;
margin-right:0cm;
margin-bottom:13.0pt;
margin-left:28.8pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-28.8pt;
page-break-after:avoid;
font-size:16.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
p.a4, li.a4, div.a4
{mso-style-name:²Î¿¼±êÌâ;
margin-top:7.8pt;
margin-right:0cm;
margin-bottom:7.8pt;
margin-left:0cm;
text-align:center;
page-break-after:avoid;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.18, li.18, div.18
{mso-style-name:Ë÷Òý±êÌâ1;
margin-top:7.8pt;
margin-right:0cm;
margin-bottom:7.8pt;
margin-left:0cm;
text-align:center;
page-break-after:avoid;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.19, li.19, div.19
{mso-style-name:Áбí1;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.25pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.25pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.1a, li.1a, div.1a
{mso-style-name:±í1;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.25pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.25pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.37, li.37, div.37
{mso-style-name:ͼ˵Ã÷3;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.62, li.62, div.62
{mso-style-name:±íÖÐ×ÖÌå6ºÅ;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
layout-grid-mode:char;
font-size:7.5pt;
font-family:ËÎÌå;}
p.a5, li.a5, div.a5
{mso-style-name:ÕýÎÄ´úÂë;
mso-style-link:"ÕýÎÄ´úÂë Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char1
{mso-style-name:"ÕýÎÄ´úÂë Char";
mso-style-link:ÕýÎÄ´úÂë;
font-family:ËÎÌå;}
p.43, li.43, div.43
{mso-style-name:"Ñùʽ ±êÌâ 4 +";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
page-break-after:avoid;
font-size:12.0pt;
font-family:"Arial","sans-serif";
font-weight:bold;}
p.140, li.140, div.140
{mso-style-name:±í14;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.25pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.25pt;
font-size:10.5pt;
font-family:ËÎÌå;}
p.141, li.141, div.141
{mso-style-name:ͼ˵Ã÷14;
mso-style-link:"ͼ˵Ã÷14 Char";
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:21.25pt;
margin-bottom:.0001pt;
text-align:center;
text-indent:-21.25pt;
font-size:10.5pt;
font-family:ËÎÌå;}
span.14Char
{mso-style-name:"ͼ˵Ã÷14 Char";
mso-style-link:ͼ˵Ã÷14;
font-family:ËÎÌå;}
p.a6, li.a6, div.a6
{mso-style-name:ÎļþĿ¼±í;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.a7, li.a7, div.a7
{mso-style-name:"Ñùʽ ÕýÎÄ +";
mso-style-link:"Ñùʽ ÕýÎÄ + Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char2
{mso-style-name:"Ñùʽ ÕýÎÄ + Char";
mso-style-link:"Ñùʽ ÕýÎÄ +";
font-family:"Times New Roman","serif";}
p.a8, li.a8, div.a8
{mso-style-name:±í¸ñÌâ×¢;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.a9, li.a9, div.a9
{mso-style-name:ÁбíÌâ×¢;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.aa, li.aa, div.aa
{mso-style-name:ͼÌâ×¢;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.ab, li.ab, div.ab
{mso-style-name:³ÌÐòÌâ×¢;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.ac, li.ac, div.ac
{mso-style-name:¿òÖÐÎÄ×Ö;
margin-top:0cm;
margin-right:21.0pt;
margin-bottom:0cm;
margin-left:21.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
border:none;
padding:0cm;
font-size:9.0pt;
font-family:ËÎÌå;}
p.125, li.125, div.125
{mso-style-name:"Ñùʽ ±êÌâ 1 + ¾ÓÖÐ2";
margin-top:17.0pt;
margin-right:0cm;
margin-bottom:16.5pt;
margin-left:0cm;
text-align:center;
page-break-after:avoid;
font-size:22.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.ad, li.ad, div.ad
{mso-style-name:"Ñùʽ Ìâ×¢ + ËÎÌå ÎåºÅ ¾ÓÖÐ";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ºÚÌå;}
p.1b, li.1b, div.1b
{mso-style-name:Ðò±êÌâ1;
margin-top:17.0pt;
margin-right:0cm;
margin-bottom:16.5pt;
margin-left:0cm;
line-height:240%;
page-break-after:avoid;
font-size:16.0pt;
font-family:ËÎÌå;
font-weight:bold;}
p.38, li.38, div.38
{mso-style-name:Ðò±êÌâ3;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
page-break-after:avoid;
font-size:12.0pt;
font-family:·½ÕýС±êËμòÌå;}
p.63, li.63, div.63
{mso-style-name:±íÖÐÎÄ×Ö6ºÅ;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:7.5pt;
font-family:ËÎÌå;}
p.64, li.64, div.64
{mso-style-name:ͼÖÐÎÄ×Ö6ºÅ×óÔÆë;
margin:0cm;
margin-bottom:.0001pt;
line-height:10.0pt;
layout-grid-mode:char;
font-size:7.5pt;
font-family:ËÎÌå;}
p.65, li.65, div.65
{mso-style-name:ͼÖÐÎÄ×Ö6ºÅ;
mso-style-link:"ͼÖÐÎÄ×Ö6ºÅ Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
line-height:10.0pt;
layout-grid-mode:char;
font-size:7.5pt;
font-family:ËÎÌå;}
span.6Char
{mso-style-name:"ͼÖÐÎÄ×Ö6ºÅ Char";
mso-style-link:ͼÖÐÎÄ×Ö6ºÅ;
font-family:ËÎÌå;}
p.ae, li.ae, div.ae
{mso-style-name:ͼ±ê;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.28, li.28, div.28
{mso-style-name:ͼ±ê2;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
p.af, li.af, div.af
{mso-style-name:ϰÌâ±êÌâ;
margin-top:6.0pt;
margin-right:0cm;
margin-bottom:0cm;
margin-left:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
page-break-after:avoid;
font-size:14.0pt;
font-family:ºÚÌå;}
p.1c, li.1c, div.1c
{mso-style-name:²¿·Ö±àºÅ1;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:16.0pt;
font-family:ËÎÌå;}
p.af0, li.af0, div.af0
{mso-style-name:±í±êÌâ;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.af1, li.af1, div.af1
{mso-style-name:"Ñùʽ Ìâ×¢ + ¾ÓÖÐ";
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:ËÎÌå;}
p.ListTitle, li.ListTitle, div.ListTitle
{mso-style-name:ListTitle;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.FigureTitle, li.FigureTitle, div.FigureTitle
{mso-style-name:FigureTitle;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.TableTitle, li.TableTitle, div.TableTitle
{mso-style-name:TableTitle;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.ProgramTitle, li.ProgramTitle, div.ProgramTitle
{mso-style-name:ProgramTitle;
margin:0cm;
margin-bottom:.0001pt;
text-align:center;
font-size:10.5pt;
font-family:"Arial","sans-serif";}
p.RightText, li.RightText, div.RightText
{mso-style-name:RightText;
margin-top:0cm;
margin-right:21.0pt;
margin-bottom:0cm;
margin-left:42.0pt;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
border:none;
padding:0cm;
font-size:9.0pt;
font-family:ËÎÌå;}
p.af2, li.af2, div.af2
{mso-style-name:±íÖÐÎÄ×ÖСÎå;
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:9.0pt;
font-family:ËÎÌå;}
p.af3, li.af3, div.af3
{mso-style-name:¹Ø¼ü´Ê;
mso-style-link:"¹Ø¼ü´Ê Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char3
{mso-style-name:"¹Ø¼ü´Ê Char";
mso-style-link:¹Ø¼ü´Ê;
font-family:ËÎÌå;}
p.af4, li.af4, div.af4
{mso-style-name:ÎļþÃû;
mso-style-link:"ÎļþÃû Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char4
{mso-style-name:"ÎļþÃû Char";
mso-style-link:ÎļþÃû;
font-family:ËÎÌå;}
p.af5, li.af5, div.af5
{mso-style-name:Ñ¡Ïî;
mso-style-link:"Ñ¡Ïî Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char5
{mso-style-name:"Ñ¡Ïî Char";
mso-style-link:Ñ¡Ïî;
font-family:ËÎÌå;}
p.af6, li.af6, div.af6
{mso-style-name:ÃüÁîÐÐ;
mso-style-link:"ÃüÁîÐÐ Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char6
{mso-style-name:"ÃüÁîÐÐ Char";
mso-style-link:ÃüÁîÐÐ;
font-family:ËÎÌå;}
p.af7, li.af7, div.af7
{mso-style-name:º¯ÊýÃû;
mso-style-link:"º¯ÊýÃû Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char7
{mso-style-name:"º¯ÊýÃû Char";
mso-style-link:º¯ÊýÃû;
font-family:ËÎÌå;}
p.af8, li.af8, div.af8
{mso-style-name:¼Ä´æÆ÷Ãû;
mso-style-link:"¼Ä´æÆ÷Ãû Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char8
{mso-style-name:"¼Ä´æÆ÷Ãû Char";
mso-style-link:¼Ä´æÆ÷Ãû;
font-family:"Times New Roman","serif";}
p.af9, li.af9, div.af9
{mso-style-name:±äÁ¿Ãû;
mso-style-link:"±äÁ¿Ãû Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:ËÎÌå;}
span.Char9
{mso-style-name:"±äÁ¿Ãû Char";
mso-style-link:±äÁ¿Ãû;
font-family:ËÎÌå;}
p.58, li.58, div.58
{mso-style-name:ͼÖÐÎÄ×ÖС5ºÅ×ó;
margin:0cm;
margin-bottom:.0001pt;
font-size:9.0pt;
font-family:ËÎÌå;}
p.59, li.59, div.59
{mso-style-name:ͼÖÐÎÄ×ÖС5ºÅ¿¿×ó;
margin:0cm;
margin-bottom:.0001pt;
layout-grid-mode:char;
font-size:9.0pt;
font-family:ËÎÌå;}
p.926, li.926, div.926
{mso-style-name:"Ñùʽ ´úÂë³ÌÐò + ×ó²à\: 9\.26 ÀåÃ×";
margin:0cm;
margin-bottom:.0001pt;
layout-grid-mode:char;
font-size:10.0pt;
font-family:ËÎÌå;}
span.5Char4
{mso-style-name:"±êÌâ 5 Char";
mso-style-link:"±êÌâ 5";
font-weight:bold;}
span.6Char0
{mso-style-name:"±êÌâ 6 Char";
mso-style-link:"±êÌâ 6";
font-family:"Arial","sans-serif";
font-weight:bold;}
span.7Char
{mso-style-name:"±êÌâ 7 Char";
mso-style-link:"±êÌâ 7";
font-weight:bold;}
span.8Char
{mso-style-name:"±êÌâ 8 Char";
mso-style-link:"±êÌâ 8";
font-family:"Arial","sans-serif";}
span.9Char
{mso-style-name:"±êÌâ 9 Char";
mso-style-link:"±êÌâ 9";
font-family:"Arial","sans-serif";}
span.Chara
{mso-style-name:"½Å×¢Îı¾ Char";
mso-style-link:½Å×¢Îı¾;
font-family:ËÎÌå;}
span.Charb
{mso-style-name:"Åú×¢ÎÄ×Ö Char";
mso-style-link:Åú×¢ÎÄ×Ö;
font-family:ËÎÌå;}
span.Charc
{mso-style-name:"ҳü Char";
mso-style-link:ҳü;
font-family:ËÎÌå;}
span.Chard
{mso-style-name:"Ò³½Å Char";
mso-style-link:Ò³½Å;
font-family:ËÎÌå;}
span.Chare
{mso-style-name:"ÈÕÆÚ Char";
mso-style-link:ÈÕÆÚ;
font-family:ËÎÌå;}
span.HTMLChar
{mso-style-name:"HTML Ô¤Éè¸ñʽ Char\,HTML Ô¤Ïȸñʽ»¯ Char\,HTML Ô¤Ïȸñʽ»¯1 Char\,HTML Ô¤Ïȸñʽ»¯2 Char\,HTML Ô¤Ïȸñʽ»¯3 Char";
mso-style-link:"HTML Ô¤Éè¸ñʽ\,HTML Ô¤Ïȸñʽ»¯\,HTML Ô¤Ïȸñʽ»¯1\,HTML Ô¤Ïȸñʽ»¯2\,HTML Ô¤Ïȸñʽ»¯3";
font-family:ËÎÌå;}
span.Charf
{mso-style-name:"Åú×¢Ö÷Ìâ Char";
mso-style-link:Åú×¢Ö÷Ìâ;
font-family:ËÎÌå;
font-weight:bold;}
span.Charf0
{mso-style-name:"Åú×¢¿òÎı¾ Char";
mso-style-link:Åú×¢¿òÎı¾;
font-family:ËÎÌå;}
span.3CharChar1
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char1";
font-family:ËÎÌå;}
span.3CharChar3
{mso-style-name:"ͼÖÐÎÄ×Ö3 Char Char3";
font-family:ËÎÌå;}
span.msoIns
{mso-style-name:"";
text-decoration:underline;
color:teal;}
span.msoDel
{mso-style-name:"";
text-decoration:line-through;
color:red;}
.MsoChpDefault
{font-size:10.0pt;}
/* Page Definitions */
@page WordSection1
{size:595.3pt 841.9pt;
margin:72.0pt 54.0pt 72.0pt 54.0pt;
layout-grid:15.6pt;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style>
</head>
<body lang=ZH-CN link=blue vlink=purple style='text-justify-trim:punctuation'>
<div class=WordSection1 style='layout-grid:15.6pt'>
<p class=ab><a name="_Toc53320648"><span style='font-family:ºÚÌå'>³ÌÐò</span><span
lang=EN-US>12-6 linux/fs/namei.c</span></a></p>
<div class=a align=center style='text-align:center'><span lang=EN-US>
<hr size=4 width="100%" align=center>
</span></div>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>1</span></u> <b><i>/*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>2</span></u> <b><i>&nbsp;*&nbsp;
linux/fs/namei.c</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>3</span></u> <b><i>&nbsp;*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>4</span></u> <b><i>&nbsp;*&nbsp;
(C) 1991&nbsp; Linus Torvalds</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>5</span></u> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>6</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>7</span></u> <b><i>/*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>8</span></u> <b><i>&nbsp;*
Some corrections by tytso.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp; <u><span style='color:blue'>9</span></u> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>10</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>11</span></u>
#include &lt;linux/sched.h&gt;&nbsp; // </span>µ÷¶È³ÌÐòÍ·Îļþ£¬¶¨ÒåÁËÈÎÎñ½á¹¹<span lang=EN-US>task_struct</span>¡¢ÈÎÎñ<span
lang=EN-US>0</span>µÄÊý¾ÝµÈ¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>12</span></u>
#include &lt;linux/kernel.h&gt; // </span>ÄÚºËÍ·Îļþ¡£º¬ÓÐһЩÄں˳£Óú¯ÊýµÄÔ­Ðζ¨Òå¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>13</span></u>
#include &lt;asm/segment.h&gt;&nbsp; // </span>¶Î²Ù×÷Í·Îļþ¡£¶¨ÒåÁËÓйضμĴæÆ÷²Ù×÷µÄǶÈëʽ»ã±àº¯Êý¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>14</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>15</span></u>
#include &lt;string.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // </span>×Ö·û´®Í·Îļþ¡£Ö÷Òª¶¨ÒåÁËһЩÓйØ×Ö·û´®²Ù×÷µÄǶÈ뺯Êý¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>16</span></u>
#include &lt;fcntl.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // </span>Îļþ¿ØÖÆÍ·Îļþ¡£Îļþ¼°ÆäÃèÊö·ûµÄ²Ù×÷¿ØÖƳ£Êý·ûºÅµÄ¶¨Òå¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>17</span></u>
#include &lt;errno.h&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// </span>´íÎóºÅÍ·Îļþ¡£°üº¬ÏµÍ³Öи÷ÖÖ³ö´íºÅ¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>18</span></u>
#include &lt;const.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // </span>³£Êý·ûºÅÍ·Îļþ¡£Ä¿Ç°½ö¶¨Òå<span
lang=EN-US>i</span>½ÚµãÖÐ<span lang=EN-US>i_mode</span>×ֶεĸ÷±ê־λ¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>19</span></u>
#include &lt;sys/stat.h&gt;&nbsp;&nbsp;&nbsp;&nbsp; // </span>Îļþ״̬ͷÎļþ¡£º¬ÓÐÎļþ»òÎļþϵͳ״̬½á¹¹<span
lang=EN-US>stat{}</span>ºÍ³£Á¿¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>20</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÓÉÎļþÃû²éÕÒ¶ÔÓ¦<span
lang=EN-US>i</span>½ÚµãµÄÄÚ²¿º¯Êý¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>21</span></u>
static struct <u><span style='color:blue'>m_inode</span></u> * <u><span
style='color:blue'>_namei</span></u>(const char * filename, struct <u><span
style='color:blue'>m_inode</span></u> * base,</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>22</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int follow_links);</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>23</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÂÃæºêÖÐÓÒ²à±í´ïʽÊÇ·ÃÎÊÊý×éµÄÒ»ÖÖÌØÊâʹÓ÷½·¨¡£Ëü»ùÓÚÕâÑùµÄÒ»¸öÊÂʵ£¬¼´ÓÃÊý×éÃûºÍ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Êý×éϱêËù±íʾµÄÊý×éÏÀýÈç<span
lang=EN-US>a[b]</span>£©µÄÖµµÈͬÓÚʹÓÃÊý×éÊ×Ö¸Õ루µØÖ·£©¼ÓÉϸÃÏîÆ«ÒÆµØÖ·</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄÐÎʽµÄÖµ <span
lang=EN-US>*(a + b)</span>£¬Í¬Ê±¿ÉÖªÏî<span lang=EN-US>a[b]</span>Ò²¿ÉÒÔ±íʾ³É<span
lang=EN-US>b[a]</span>µÄÐÎʽ¡£Òò´Ë¶ÔÓÚ×Ö·ûÊý×éÏîÐÎʽ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ϊ <span lang=EN-US>&quot;LoveYou&quot;[2]</span>£¨»òÕß<span
lang=EN-US>2[&quot;LoveYou&quot;]</span>£©¾ÍµÈͬÓÚ<span lang=EN-US>*(&quot;LoveYou&quot;
+ 2)</span>¡£ÁíÍ⣬×Ö·û´®<span lang=EN-US>&quot;LoveYou&quot;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔÚÄÚ´æÖб»´æ´¢µÄλÖþÍÊÇÆäµØÖ·£¬Òò´ËÊý×éÏî<span
lang=EN-US>&quot;LoveYou&quot;[2]</span>µÄÖµ¾ÍÊǸÃ×Ö·û´®ÖÐË÷ÒýֵΪ<span lang=EN-US>2</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ×Ö·û<span lang=EN-US>&quot;v&quot;</span>Ëù¶ÔÓ¦µÄ<span
lang=EN-US>ASCII</span>ÂëÖµ<span lang=EN-US>0x76</span>£¬»òÓð˽øÖƱíʾ¾ÍÊÇ<span
lang=EN-US>0166</span>¡£ÔÚ<span lang=EN-US>C</span>ÓïÑÔÖУ¬×Ö·ûÒ²¿ÉÒÔÓÃ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Æä<span lang=EN-US>ASCII</span>ÂëÖµÀ´±íʾ£¬·½·¨ÊÇÔÚ×Ö·ûµÄ<span
lang=EN-US>ASCII</span>ÂëÖµÇ°Ãæ¼ÓÒ»¸ö·´Ð±¸Ü¡£ÀýÈç×Ö·û <span lang=EN-US>&quot;v&quot;</span>¿ÉÒÔ±íʾ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>³É<span lang=EN-US>&quot;\x76&quot;</span>»òÕß<span
lang=EN-US>&quot;\166&quot;</span>¡£Òò´Ë¶ÔÓÚ²»¿ÉÏÔʾµÄ×Ö·û£¨ÀýÈç<span lang=EN-US>ASCII</span>ÂëֵΪ<span
lang=EN-US>0x00--0x1f</span>µÄ¿ØÖÆ×Ö·û£©</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¾Í¿ÉÓÃÆä<span lang=EN-US>ASCII</span>ÂëÖµÀ´±íʾ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÂÃæÊÇ·ÃÎÊģʽºê¡£<span
lang=EN-US>x</span>ÊÇÍ·Îļþ<span lang=EN-US>include/fcntl.h</span>ÖеÚ<span
lang=EN-US>7</span>ÐпªÊ¼¶¨ÒåµÄÎļþ·ÃÎÊ£¨´ò¿ª£©±êÖ¾¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Õâ¸öºê¸ù¾ÝÎļþ·ÃÎʱêÖ¾<span
lang=EN-US>x</span>µÄÖµÀ´Ë÷ÒýË«ÒýºÅÖжÔÓ¦µÄÊýÖµ¡£Ë«ÒýºÅÖÐÓÐ<span lang=EN-US>4</span>¸ö°Ë½øÖÆÊýÖµ£¨Êµ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼Ê±íʾ<span lang=EN-US>4</span>¸ö¿ØÖÆ×Ö·û£©£º<span
lang=EN-US>&quot;\004\002\006\377&quot;</span>£¬·Ö±ð±íʾ¶Á¡¢Ð´ºÍÖ´ÐеÄȨÏÞΪ<span lang=EN-US>:
r</span>¡¢<span lang=EN-US>w</span>¡¢<span lang=EN-US>rw</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ºÍ<span lang=EN-US>wxrwxrwx</span>£¬²¢ÇÒ·Ö±ð¶ÔÓ¦<span
lang=EN-US>x</span>µÄË÷ÒýÖµ<span lang=EN-US>0--3</span>¡£ ÀýÈ磬Èç¹û<span lang=EN-US>x</span>Ϊ<span
lang=EN-US>2</span>£¬Ôò¸Ãºê·µ»Ø°Ë½øÖÆÖµ<span lang=EN-US>006</span>£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>±íʾ¿É¶Á¿Éд£¨<span
lang=EN-US>rw</span>£©¡£ÁíÍ⣬ÆäÖÐ<span lang=EN-US>O_ACCMODE = 00003</span>£¬ÊÇË÷ÒýÖµ<span
lang=EN-US>x</span>µÄÆÁ±ÎÂë¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>24</span></u>
#define <u><span style='color:blue'>ACC_MODE</span></u>(<u><span
style='color:blue'>x</span></u>) (<i>&quot;\004\002\006\377&quot;</i>[(<u><span
style='color:blue'>x</span></u>)&amp;<u><span style='color:blue'>O_ACCMODE</span></u>])</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>25</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>26</span></u> <b><i>/*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>27</span></u> <b><i>&nbsp;*
comment out this line if you want names &gt; NAME_LEN chars to be</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>28</span></u> <b><i>&nbsp;*
truncated. Else they will be disallowed.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>29</span></u> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>Èç¹ûÏëÈÃÎļþÃû³¤¶È<span
lang=EN-US> &gt; NAME_LEN</span>¸öµÄ×Ö·û±»½Øµô£¬¾Í½«ÏÂÃæ¶¨Òå×¢Ê͵ô¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>30</span></u> <b><i>/*
#define NO_TRUNCATE */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>31</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>32</span></u>
#define <u><span style='color:blue'>MAY_EXEC</span></u> 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>¿ÉÖ´ÐÐ<span lang=EN-US>(</span>¿É½øÈë<span lang=EN-US>)</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>33</span></u>
#define <u><span style='color:blue'>MAY_WRITE</span></u> 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>¿Éд¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>34</span></u>
#define <u><span style='color:blue'>MAY_READ</span></u> 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>¿É¶Á¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>35</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>36</span></u> <b><i>/*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>37</span></u> <b><i>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
permission()</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>38</span></u> <b><i>&nbsp;*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>39</span></u> <b><i>&nbsp;*
is used to check for read/write/execute permissions on a file.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>40</span></u> <b><i>&nbsp;*
I don't know if we should look at just the euid or both euid and</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>41</span></u> <b><i>&nbsp;*
uid, but that should be easily changed.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>42</span></u> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; permission()</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>¸Ãº¯ÊýÓÃÓÚ¼ì²âÒ»¸öÎļþµÄ¶Á<span
lang=EN-US>/</span>д<span lang=EN-US>/</span>Ö´ÐÐȨÏÞ¡£ÎÒ²»ÖªµÀÊÇ·ñÖ»Ðè¼ì²é<span lang=EN-US>euid</span>£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>»¹ÊÇÐèÒª¼ì²é<span
lang=EN-US>euid</span>ºÍ<span lang=EN-US>uid</span>Á½Õߣ¬²»¹ýÕâºÜÈÝÒ×Ð޸ġ£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>¼ì²âÎļþ·ÃÎÊÐí¿ÉȨÏÞ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>inode
- </span>ÎļþµÄ<span lang=EN-US>i</span>½ÚµãÖ¸Õ룻<span lang=EN-US>mask - </span>·ÃÎÊÊôÐÔÆÁ±ÎÂë¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º·ÃÎÊÐí¿É·µ»Ø<span
lang=EN-US>1</span>£¬·ñÔò·µ»Ø<span lang=EN-US>0</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>43</span></u>
static int <u><span style='color:blue'>permission</span></u>(struct <u><span
style='color:blue'>m_inode</span></u> * inode,int mask)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>44</span></u> {</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>45</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int mode = inode-&gt;i_mode;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
</span>Îļþ·ÃÎÊÊôÐÔ¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>46</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>47</span></u> <b><i>/*
special case: not even root can read/write a deleted file */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /* </span>ÌØÊâÇé¿ö£º¼´Ê¹Êdz¬¼¶Óû§£¨<span
lang=EN-US>root</span>£©Ò²²»ÄܶÁ<span lang=EN-US>/</span>дһ¸öÒѱ»É¾³ýµÄÎļþ<span lang=EN-US>
*/</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹û<span lang=EN-US>i</span>½ÚµãÓжÔÓ¦µÄÉ豸£¬µ«¸Ã<span
lang=EN-US>i</span>½ÚµãµÄÁ´½Ó¼ÆÊýÖµµÈÓÚ<span lang=EN-US>0</span>£¬±íʾ¸ÃÎļþÒѱ»É¾³ý£¬Ôò·µ»Ø¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·ñÔò£¬Èç¹û½ø³ÌµÄÓÐЧÓû§<span
lang=EN-US>id</span>£¨<span lang=EN-US>euid</span>£©Óë<span lang=EN-US>i</span>½ÚµãµÄÓû§<span
lang=EN-US>id</span>Ïàͬ£¬ÔòÈ¡ÎļþËÞÖ÷µÄ·ÃÎÊȨÏÞ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·ñÔò£¬Èç¹û½ø³ÌµÄÓÐЧ×é<span
lang=EN-US>id</span>£¨<span lang=EN-US>egid</span>£©Óë<span lang=EN-US>i</span>½ÚµãµÄ×é<span
lang=EN-US>id</span>Ïàͬ£¬ÔòÈ¡×éÓû§µÄ·ÃÎÊȨÏÞ¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>48</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (inode-&gt;i_dev &amp;&amp; !inode-&gt;i_nlinks)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>49</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>50</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
else if (<u><span style='color:blue'>current</span></u>-&gt;euid==inode-&gt;i_uid)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>51</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
mode &gt;&gt;= 6;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>52</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
else if (<u><span style='color:blue'>in_group_p</span></u>(inode-&gt;i_gid))</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>53</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
mode &gt;&gt;= 3;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>×îºóÅжÏÈç¹ûËùÈ¡µÄµÄ·ÃÎÊȨÏÞÓëÆÁ±ÎÂëÏàͬ£¬»òÕßÊdz¬¼¶Óû§£¬Ôò·µ»Ø<span
lang=EN-US>1</span>£¬·ñÔò·µ»Ø<span lang=EN-US>0</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>54</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (((mode &amp; mask &amp; 0007) == mask) || <u><span style='color:blue'>suser</span></u>())</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>55</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 1;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>56</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>57</span></u> }</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>58</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>59</span></u> <b><i>/*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>60</span></u> <b><i>&nbsp;*
ok, we cannot use strncmp, as the name is not in our data space.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>61</span></u> <b><i>&nbsp;*
Thus we'll have to use match. No big problem. Match also makes</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>62</span></u> <b><i>&nbsp;*
some sanity tests.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>63</span></u> <b><i>&nbsp;*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>64</span></u> <b><i>&nbsp;*
NOTE! unlike strncmp, match returns 1 for success, 0 for failure.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>65</span></u> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * ok</span>£¬ÎÒÃDz»ÄÜʹÓÃ<span
lang=EN-US>strncmp</span>×Ö·û´®±È½Ïº¯Êý£¬ÒòΪÃû³Æ²»ÔÚÎÒÃǵÄÊý¾Ý¿Õ¼ä</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>£¨²»ÔÚÄں˿ռ䣩¡£ Òò¶øÎÒÃÇÖ»ÄÜʹÓÃ
<span lang=EN-US>match()</span>¡£ÎÊÌâ²»´ó£¬<span lang=EN-US>match()</span>ͬÑù</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>Ò²´¦ÀíһЩÍêÕûµÄ²âÊÔ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>×¢Ò⣡Óë<span
lang=EN-US>strncmp</span>²»Í¬µÄÊÇ<span lang=EN-US>match()</span>³É¹¦Ê±·µ»Ø<span
lang=EN-US>1</span>£¬Ê§°Üʱ·µ»Ø<span lang=EN-US>0</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>Ö¸¶¨³¤¶È×Ö·û´®±È½Ïº¯Êý¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>len
- </span>±È½ÏµÄ×Ö·û´®³¤¶È£»<span lang=EN-US>name - </span>ÎļþÃûÖ¸Õ룻<span lang=EN-US>de - </span>Ŀ¼Ïî½á¹¹¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£ºÏàͬ·µ»Ø<span
lang=EN-US>1</span>£¬²»Í¬·µ»Ø<span lang=EN-US>0</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÚ<span lang=EN-US>68</span>ÐÐÉ϶¨ÒåÁËÒ»¸ö¾Ö²¿¼Ä´æÆ÷±äÁ¿<span
lang=EN-US>same</span>¡£¸Ã±äÁ¿½«±»±£´æÔÚ<span lang=EN-US>eax</span>¼Ä´æÆ÷ÖУ¬ÒÔ±ãÓÚ¸ßЧ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·ÃÎÊ¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>66</span></u>
static int <u><span style='color:blue'>match</span></u>(int len,const char *
name,struct <u><span style='color:blue'>dir_entry</span></u> * de)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>67</span></u> {</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>68</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
register int same __asm__(<i>&quot;ax&quot;</i>);</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>69</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏÈÅжϺ¯Êý²ÎÊýµÄÓÐЧÐÔ¡£Èç¹ûĿ¼ÏîÖ¸Õë¿Õ£¬»òÕßĿ¼Ïî<span
lang=EN-US>i</span>½ÚµãµÈÓÚ<span lang=EN-US>0</span>£¬»òÕßÒª±È½ÏµÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>×Ö·û´®³¤¶È³¬¹ýÎļþÃû³¤¶È£¬Ôò·µ»Ø<span
lang=EN-US>0</span>£¨²»Æ¥Å䣩¡£Èç¹û±È½ÏµÄ³¤¶È<span lang=EN-US>len</span>µÈÓÚ<span lang=EN-US>0</span>²¢ÇÒĿ¼Ïî</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÖÐÎļþÃûµÄµÚ<span
lang=EN-US>1</span>¸ö×Ö·ûÊÇ <span lang=EN-US>'.'</span>£¬²¢ÇÒÖ»ÓÐÕâôһ¸ö×Ö·û£¬ÄÇôÎÒÃǾÍÈÏΪÊÇÏàͬµÄ£¬Òò´Ë·µ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»Ø<span lang=EN-US>1</span>£¨Æ¥Å䣩¡£Èç¹ûÒª±È½ÏµÄ³¤¶È<span
lang=EN-US>len</span>СÓÚ<span lang=EN-US>NAME_LEN</span>£¬µ«ÊÇĿ¼ÏîÖÐÎļþÃû³¤¶È³¬¹ý<span
lang=EN-US>len</span>£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔòÒ²·µ»Ø<span lang=EN-US>0</span>£¨²»Æ¥Å䣩¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÚ<span lang=EN-US>75</span>ÐÐÉ϶ÔĿ¼ÏîÖÐÎļþÃû³¤¶ÈÊÇ·ñ³¬¹ý
<span lang=EN-US>len </span>µÄÅжϷ½·¨ÊǼì²â <span lang=EN-US>name[len] </span>ÊÇ·ñΪ<span
lang=EN-US>NULL</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èô³¤¶È³¬¹ý<span lang=EN-US>len</span>£¬Ôò<span
lang=EN-US>name[len]</span>´¦¾ÍÊÇÒ»¸ö²»ÊÇ<span lang=EN-US>NULL</span>µÄÆÕͨ×Ö·û¡£¶ø¶ÔÓÚ³¤¶ÈΪ<span
lang=EN-US>len</span>µÄ×Ö·û</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´®<span lang=EN-US>name</span>£¬×Ö·û<span
lang=EN-US>name[len]</span>¾ÍÓ¦¸ÃÊÇ<span lang=EN-US>NULL</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>70</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!de || !de-&gt;inode || len &gt; <u><span style='color:blue'>NAME_LEN</span></u>)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>71</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>72</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><i>/* &quot;&quot; means &quot;.&quot; ---&gt; so paths like
&quot;/usr/lib//libc.a&quot; work */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/* &quot;&quot; </span>µ±×÷ <span lang=EN-US>&quot;.&quot; </span>À´¿´´ý <span
lang=EN-US>---&gt; </span>ÕâÑù¾ÍÄÜ´¦ÀíÏó <span lang=EN-US>&quot;/usr/lib//libc.a&quot;
</span>ÄÇÑùµÄ·¾¶Ãû<span lang=EN-US> */</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>73</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!len &amp;&amp; (de-&gt;name[0]==<i>'.'</i>) &amp;&amp; (de-&gt;name[1]==<i>'\0'</i>))</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>74</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 1;</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>75</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (len &lt; <u><span style='color:blue'>NAME_LEN</span></u> &amp;&amp;
de-&gt;name[len])</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>76</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóʹÓÃǶÈë»ã±àÓï¾ä½øÐпìËٱȽϲÙ×÷¡£Ëü»áÔÚÓû§Êý¾Ý¿Õ¼ä£¨<span
lang=EN-US>fs</span>¶Î£©Ö´ÐÐ×Ö·û´®µÄ±È½Ï</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²Ù×÷¡£<span lang=EN-US>%0
- eax</span>£¨±È½Ï½á¹û<span lang=EN-US>same</span>£©£»<span lang=EN-US>%1 - eax</span>£¨<span
lang=EN-US>eax</span>³õÖµ<span lang=EN-US>0</span>£©£»<span lang=EN-US>%2 - esi</span>£¨Ãû×ÖÖ¸Õ룩£»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // %3 - edi</span>£¨Ä¿Â¼ÏîÃûÖ¸Õ룩£»<span
lang=EN-US>%4 - ecx(</span>±È½ÏµÄ×Ö½Ú³¤¶ÈÖµ<span lang=EN-US>len)</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>77</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
__asm__(<i>&quot;cld\n\t&quot;</i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>Çå·½Ïò±ê־λ¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>78</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i>&quot;fs ; repe ; cmpsb\n\t&quot;</i>&nbsp;&nbsp; // </span>Óû§¿Õ¼äÖ´ÐÐÑ­»·±È½Ï<span
lang=EN-US>[esi++]</span>ºÍ<span lang=EN-US>[edi++]</span>²Ù×÷£¬</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>79</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i>&quot;setz %%al&quot;</i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;// </span>Èô±È½Ï½á¹ûÒ»Ñù£¨<span lang=EN-US>zf=0</span>£©ÔòÖÃ<span lang=EN-US>al=1</span>£¨<span
lang=EN-US>same=eax</span>£©¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>80</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:<i>&quot;=a&quot;</i> (same)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>81</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:<i>&quot;&quot;</i> (0),<i>&quot;S&quot;</i> ((long) name),<i>&quot;D&quot;</i>
((long) de-&gt;name),<i>&quot;c&quot;</i> (len)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>82</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:<i>&quot;cx&quot;</i>,<i>&quot;di&quot;</i>,<i>&quot;si&quot;</i>);</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>83</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return same;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>·µ»Ø±È½Ï½á¹û¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>84</span></u> }</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>85</span></u> </span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>86</span></u> <b><i>/*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>87</span></u> <b><i>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
find_entry()</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>88</span></u> <b><i>&nbsp;*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>89</span></u> <b><i>&nbsp;*
finds an entry in the specified directory with the wanted name. It</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>90</span></u> <b><i>&nbsp;*
returns the cache buffer in which the entry was found, and the entry</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>91</span></u> <b><i>&nbsp;*
itself (as a parameter - res_dir). It does NOT read the inode of the</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>92</span></u> <b><i>&nbsp;*
entry - you'll have to do that yourself if you want to.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>93</span></u> <b><i>&nbsp;*</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>94</span></u> <b><i>&nbsp;*
This also takes care of the few special cases due to '..'-traversal</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>95</span></u> <b><i>&nbsp;*
over a pseudo-root and a mount point.</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>96</span></u> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;
find_entry()</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>ÔÚÖ¸¶¨Ä¿Â¼ÖÐѰÕÒÒ»¸öÓëÃû×ÖÆ¥ÅäµÄĿ¼Ïî¡£·µ»ØÒ»¸öº¬ÓÐÕÒµ½Ä¿Â¼ÏîµÄ¸ßËÙ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>»º³å¿éÒÔ¼°Ä¿Â¼Ïî±¾Éí£¨×÷Ϊһ¸ö²ÎÊý<span
lang=EN-US> - res_dir</span>£©¡£¸Ãº¯Êý²¢²»¶ÁȡĿ¼Ïî</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>µÄ<span
lang=EN-US>i</span>½Úµã<span lang=EN-US> - </span>Èç¹ûÐèÒªµÄ»°Ôò×Ô¼º²Ù×÷¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>ÓÉÓÚÓÐ<span
lang=EN-US>'..'</span>Ŀ¼ÏÒò´ËÔÚ²Ù×÷ÆÚ¼äÒ²»á¶Ô¼¸ÖÖÌØÊâÇé¿ö·Ö±ð´¦Àí<span lang=EN-US> - </span>±ÈÈçºáÔ½</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>Ò»¸öα¸ùĿ¼ÒÔ¼°°²×°µã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>²éÕÒÖ¸¶¨Ä¿Â¼ºÍÎļþÃûµÄĿ¼Ïî¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>*dir
- </span>Ö¸¶¨Ä¿Â¼<span lang=EN-US>i</span>½ÚµãµÄÖ¸Õ룻<span lang=EN-US>name - </span>ÎļþÃû£»<span
lang=EN-US>namelen - </span>ÎļþÃû³¤¶È£»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸Ãº¯ÊýÔÚÖ¸¶¨Ä¿Â¼µÄÊý¾Ý£¨Îļþ£©ÖÐËÑË÷Ö¸¶¨ÎļþÃûµÄĿ¼Ïî¡£²¢¶ÔÖ¸¶¨ÎļþÃûÊÇ<span
lang=EN-US>'..'</span>µÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Çé¿ö¸ù¾Ýµ±Ç°½øÐеÄÏà¹ØÉèÖýøÐÐÌØÊâ´¦Àí¡£¹ØÓÚº¯Êý²ÎÊý´«µÝÖ¸ÕëµÄÖ¸ÕëµÄ×÷Óã¬Çë²Î</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼û<span lang=EN-US>linux/sched.c</span>µÚ<span
lang=EN-US>151</span>ÐÐǰµÄ×¢ÊÍ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º³É¹¦Ôòº¯Êý¸ßËÙ»º³åÇøÖ¸Õ룬²¢ÔÚ<span
lang=EN-US>*res_dir</span>´¦·µ»ØµÄĿ¼Ïî½á¹¹Ö¸Õ롣ʧ°ÜÔò·µ»Ø</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¿ÕÖ¸Õë<span lang=EN-US>NULL</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>97</span></u>
static struct <u><span style='color:blue'>buffer_head</span></u> * <u><span
style='color:blue'>find_entry</span></u>(struct <u><span style='color:blue'>m_inode</span></u>
** dir,</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>98</span></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
const char * name, int namelen, struct <u><span style='color:blue'>dir_entry</span></u>
** res_dir)</span></p>
<p class=a><span lang=EN-US>&nbsp;<u><span style='color:blue'>99</span></u> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>100</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int entries;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>101</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int block,i;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>102</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>103</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>104</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>super_block</span></u> * sb;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>105</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ͬÑù£¬±¾º¯ÊýÒ»ÉÏÀ´Ò²ÐèÒª¶Ôº¯Êý²ÎÊýµÄÓÐЧÐÔ½øÐÐÅжϺÍÑéÖ¤¡£Èç¹ûÎÒÃÇÔÚÇ°ÃæµÚ<span
lang=EN-US>30</span>ÐÐ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶¨ÒåÁË·ûºÅ³£Êý<span
lang=EN-US>NO_TRUNCATE</span>£¬ÄÇôÈç¹ûÎļþÃû³¤¶È³¬¹ý×î´ó³¤¶È<span lang=EN-US>NAME_LEN</span>£¬Ôò²»Óè´¦Àí¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûûÓж¨Òå¹ý<span
lang=EN-US>NO_TRUNCATE</span>£¬ÄÇôÔÚÎļþÃû³¤¶È³¬¹ý×î´ó³¤¶È<span lang=EN-US>NAME_LEN</span>ʱ½Ø¶ÌÖ®¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>106</span></u><span
lang=EN-US> #ifdef NO_TRUNCATE</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>107</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (namelen &gt; <u><span
style='color:blue'>NAME_LEN</span></u>)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>108</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>109</span></u><span
lang=EN-US> #else</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>110</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (namelen &gt; <u><span
style='color:blue'>NAME_LEN</span></u>)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>111</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
namelen = <u><span style='color:blue'>NAME_LEN</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>112</span></u><span
lang=EN-US> #endif</span></p>
<p class=a><span lang=EN-US>&nbsp;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏȼÆË㱾Ŀ¼ÖÐĿ¼ÏîÏîÊý<span
lang=EN-US>entries</span>¡£ Ŀ¼<span lang=EN-US>i</span>½Úµã <span lang=EN-US>i_size</span>×Ö¶ÎÖк¬Óб¾Ä¿Â¼°üº¬µÄÊý¾Ý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>³¤¶È£¬Òò´ËÆä³ýÒÔÒ»¸öĿ¼ÏîµÄ³¤¶È£¨<span
lang=EN-US>16</span>×Ö½Ú£©¼´¿ÉµÃµ½¸ÃĿ¼ÖÐĿ¼ÏîÊý¡£È»ºóÖÿշµ»Ø</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼Ïî½á¹¹Ö¸Õë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>113</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entries =
(*dir)-&gt;i_size / (sizeof (struct <u><span style='color:blue'>dir_entry</span></u>));</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>114</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *res_dir = <u><span
style='color:blue'>NULL</span></u>;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½ÓÏÂÀ´ÎÒÃǶÔĿ¼ÏîÎļþÃûÊÇ<span
lang=EN-US>'..'</span>µÄÇé¿ö½øÐÐÌØÊâ´¦Àí¡£Èç¹ûµ±Ç°½ø³ÌÖ¸¶¨µÄ¸ù<span lang=EN-US>i</span>½Úµã¾ÍÊÇ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>º¯Êý²ÎÊýÖ¸¶¨µÄĿ¼£¬Ôò˵Ã÷¶ÔÓÚ±¾½ø³ÌÀ´Ëµ£¬Õâ¸öĿ¼¾ÍÊÇËüµÄα¸ùĿ¼£¬¼´½ø³ÌÖ»ÄÜ·Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÎʸÃĿ¼ÖеÄÏî¶ø²»ÄܺóÍ˵½Æä¸¸Ä¿Â¼ÖÐÈ¥¡£Ò²¼´¶ÔÓڸýø³Ì±¾Ä¿Â¼¾ÍÈçͬÊÇÎļþϵͳµÄ¸ù</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼¡£Òò´ËÎÒÃÇÐèÒª½«ÎļþÃûÐÞ¸ÄΪ<span
lang=EN-US>'.'</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·ñÔò£¬Èç¹û¸ÃĿ¼µÄ<span
lang=EN-US>i</span>½ÚµãºÅµÈÓÚ<span lang=EN-US>ROOT_INO</span>£¨<span lang=EN-US>1</span>ºÅ£©µÄ»°£¬ËµÃ÷ȷʵÊÇÎļþϵͳµÄ¸ù<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔòÈ¡ÎļþϵͳµÄ³¬¼¶¿é¡£Èç¹û±»°²×°µ½µÄ<span
lang=EN-US>i</span>½Úµã´æÔÚ£¬ÔòÏÈ·Å»ØÔ­<span lang=EN-US>i</span>½Úµã£¬È»ºó¶Ô±»°²×°µ½</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ<span lang=EN-US>i</span>½Úµã½øÐд¦Àí¡£ÓÚÊÇÎÒÃÇÈÃ<span
lang=EN-US>*dir</span>Ö¸Ïò¸Ã±»°²×°µ½µÄ<span lang=EN-US>i</span>½Úµã£»²¢ÇÒ¸Ã<span lang=EN-US>i</span>½ÚµãµÄÒýÓÃÊý¼Ó<span
lang=EN-US>1</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼´Õë¶ÔÕâÖÖÇé¿ö£¬ÎÒÃÇÇÄÇĵؽøÐÐÁË¡°ÍµÁº»»Öù¡±¹¤³Ì<span
lang=EN-US>:)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>115</span></u><span
lang=EN-US> <b><i>/* check for '..', as we might have to do some
&quot;magic&quot; for it */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /* </span>¼ì²éĿ¼Ïî <span
lang=EN-US>'..'</span>£¬ÒòΪÎÒÃÇ¿ÉÄÜÐèÒª¶ÔÆä½øÐÐÌØÊâ´¦Àí<span lang=EN-US> */</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>116</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (namelen==2
&amp;&amp; <u><span style='color:blue'>get_fs_byte</span></u>(name)==<i>'.'</i>
&amp;&amp; <u><span style='color:blue'>get_fs_byte</span></u>(name+1)==<i>'.'</i>)
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>117</span></u><span
lang=EN-US> <b><i>/* '..' in a pseudo-root results in a faked '.' (just change
namelen) */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /* </span>α¸ùÖÐµÄ <span lang=EN-US>'..'
</span>Èçͬһ¸ö¼Ù<span lang=EN-US> '.'</span>£¨Ö»Ðè¸Ä±äÃû×Ö³¤¶È£©<span lang=EN-US> */</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>118</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ((*dir) == <u><span style='color:blue'>current</span></u>-&gt;root)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>119</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
namelen=1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>120</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
else if ((*dir)-&gt;i_num == <u><span style='color:blue'>ROOT_INO</span></u>) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>121</span></u><span
lang=EN-US> <b><i>/* '..' over a mount-point results in 'dir' being exchanged
for the mounted</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>122</span></u><span
lang=EN-US> <b><i>&nbsp;&nbsp;&nbsp;directory-inode. NOTE! We set mounted, so
that we can iput the new dir */</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /* </span>ÔÚÒ»¸ö°²×°µãÉ쵀 <span
lang=EN-US>'..' </span>½«µ¼ÖÂĿ¼½»»»µ½±»°²×°ÎļþϵͳµÄĿ¼<span lang=EN-US>i</span>½ÚµãÉÏ¡£×¢Ò⣡</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ÓÉÓÚÎÒÃÇÉèÖÃÁË<span
lang=EN-US>mounted</span>±êÖ¾£¬Òò¶øÎÒÃÇÄܹ»·Å»Ø¸ÃÐÂĿ¼<span lang=EN-US> */</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>123</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb=<u><span
style='color:blue'>get_super</span></u>((*dir)-&gt;i_dev);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>124</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (sb-&gt;s_imount) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>125</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(*dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>126</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(*dir)=sb-&gt;s_imount;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>127</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(*dir)-&gt;i_count++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>128</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>129</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>130</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÎÒÃÇ¿ªÊ¼Õý³£²Ù×÷£¬²éÕÒÖ¸¶¨ÎļþÃûµÄĿ¼ÏîÔÚʲôµØ·½¡£Òò´ËÎÒÃÇÐèÒª¶ÁȡĿ¼µÄÊý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¾Ý£¬¼´È¡³öĿ¼<span
lang=EN-US>i</span>½Úµã¶ÔÓ¦¿éÉ豸Êý¾ÝÇøÖеÄÊý¾Ý¿é£¨Âß¼­¿é£©ÐÅÏ¢¡£ÕâЩÂß¼­¿éµÄ¿éºÅ±£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´æÔÚ<span lang=EN-US>i</span>½Úµã½á¹¹µÄ
<span lang=EN-US>i_zone[9]</span>Êý×éÖС£ÎÒÃÇÏÈÈ¡ÆäÖеÚ<span lang=EN-US>1</span>¸ö¿éºÅ¡£Èç¹ûĿ¼<span
lang=EN-US>i</span>½ÚµãÖ¸ÏòµÄµÚ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ò»¸öÖ±½Ó´ÅÅÌ¿éºÅΪ<span
lang=EN-US>0</span>£¬Ôò˵Ã÷¸ÃĿ¼¾¹È»²»º¬Êý¾Ý£¬Õâ²»Õý³£¡£ÓÚÊÇ·µ»Ø<span lang=EN-US>NULL</span>Í˳ö¡£·ñÔò</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÎÒÃǾʹӽڵãËùÔÚÉ豸¶Áȡָ¶¨µÄĿ¼ÏîÊý¾Ý¿é¡£µ±È»£¬Èç¹û²»³É¹¦£¬ÔòÒ²·µ»Ø<span
lang=EN-US>NULL</span>Í˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>131</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(block =
(*dir)-&gt;i_zone[0]))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>132</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>133</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(bh = <u><span
style='color:blue'>bread</span></u>((*dir)-&gt;i_dev,block)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>134</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><span lang=EN-US>&nbsp;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´ËʱÎÒÃǾÍÔÚÕâ¸ö¶ÁÈ¡µÄĿ¼<span
lang=EN-US>i</span>½ÚµãÊý¾Ý¿éÖÐËÑË÷Æ¥ÅäÖ¸¶¨ÎļþÃûµÄĿ¼Ïî¡£Ê×ÏÈÈÃ<span lang=EN-US>de</span>Ö¸</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ïò»º³å¿éÖеÄÊý¾Ý¿é²¿·Ö£¬²¢ÔÚ²»³¬¹ýĿ¼ÖÐĿ¼ÏîÊýµÄÌõ¼þÏ£¬Ñ­»·Ö´ÐÐËÑË÷¡£ÆäÖÐ<span
lang=EN-US>i</span>ÊÇ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼ÖеÄĿ¼ÏîË÷ÒýºÅ£¬ÔÚÑ­»·¿ªÊ¼Ê±³õʼ»¯Îª<span
lang=EN-US>0</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>135</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>136</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de = (struct <u><span
style='color:blue'>dir_entry</span></u> *) bh-&gt;b_data;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>137</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (i &lt;
entries) {</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûµ±Ç°Ä¿Â¼ÏîÊý¾Ý¿éÒѾ­ËÑË÷Í꣬»¹Ã»ÓÐÕÒµ½Æ¥ÅäµÄĿ¼ÏÔòÊͷŵ±Ç°Ä¿Â¼ÏîÊý¾Ý¿é¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔÙ¶ÁÈëĿ¼µÄÏÂÒ»¸öÂß¼­¿é¡£ÈôÕâ¿éΪ¿Õ£¬ÔòÖ»Òª»¹Ã»ÓÐËÑË÷ÍêĿ¼ÖеÄËùÓÐĿ¼Ï¾Í</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ìø¹ý¸Ã¿é£¬¼ÌÐø¶ÁĿ¼µÄÏÂÒ»Âß¼­¿é¡£Èô¸Ã¿é²»¿Õ£¬¾ÍÈÃ
<span lang=EN-US>de </span>Ö¸Ïò¸ÃÊý¾Ý¿é£¬È»ºóÔÚÆäÖÐ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼ÌÐøËÑË÷¡£ÆäÖÐ<span
lang=EN-US>141</span>ÐÐÉÏ<span lang=EN-US>i/DIR_ENTRIES_PER_BLOCK</span>¿ÉµÃµ½µ±Ç°ËÑË÷µÄĿ¼ÏîËùÔÚĿ¼ÎÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼þÖеĿéºÅ£¬¶ø<span
lang=EN-US>bmap()</span>º¯Êý£¨<span lang=EN-US>inode.c</span>£¬µÚ<span lang=EN-US>142</span>ÐУ©Ôò¿É¼ÆËã³öÔÚÉ豸É϶ÔÓ¦µÄÂß¼­¿éºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>138</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ((char *)de &gt;= <u><span style='color:blue'>BLOCK_SIZE</span></u>+bh-&gt;b_data)
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>139</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>140</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
bh = <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>141</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!(block = <u><span style='color:blue'>bmap</span></u>(*dir,i/<u><span
style='color:blue'>DIR_ENTRIES_PER_BLOCK</span></u>)) ||</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>142</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!(bh = <u><span style='color:blue'>bread</span></u>((*dir)-&gt;i_dev,block))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>143</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
i += <u><span style='color:blue'>DIR_ENTRIES_PER_BLOCK</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>144</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
continue;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>145</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>146</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de = (struct <u><span style='color:blue'>dir_entry</span></u> *) bh-&gt;b_data;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>147</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûÕÒµ½Æ¥ÅäµÄĿ¼ÏîµÄ»°£¬Ôò·µ»Ø¸ÃĿ¼Ïî½á¹¹Ö¸Õë<span
lang=EN-US>de</span>ºÍ¸ÃĿ¼Ïî<span lang=EN-US>i</span>½ÚµãÖ¸Õë<span lang=EN-US>*dir</span>ÒÔ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼°¸ÃĿ¼ÏîÊý¾Ý¿éÖ¸Õë<span
lang=EN-US>bh</span>£¬²¢Í˳öº¯Êý¡£·ñÔò¼ÌÐøÔÚĿ¼ÏîÊý¾Ý¿éÖбȽÏÏÂÒ»¸öĿ¼Ïî¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>148</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (<u><span style='color:blue'>match</span></u>(namelen,name,de)) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>149</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*res_dir = de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>150</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>151</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>152</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>153</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
i++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>154</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûÖ¸¶¨Ä¿Â¼ÖеÄËùÓÐĿ¼Ïî¶¼ËÑË÷Íêºó£¬»¹Ã»ÓÐÕÒµ½ÏàÓ¦µÄĿ¼ÏÔòÊÍ·ÅĿ¼µÄÊý¾Ý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¿é£¬×îºó·µ»Ø<span
lang=EN-US>NULL</span>£¨Ê§°Ü£©¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>155</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>156</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <u><span
style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>157</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>158</span></u><span
lang=EN-US> </span></p>
<p class=a><u><span lang=EN-US style='color:blue'>159</span></u><span
lang=EN-US> <b><i>/*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>160</span></u><span
lang=EN-US> <b><i>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add_entry()</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>161</span></u><span
lang=EN-US> <b><i>&nbsp;*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>162</span></u><span
lang=EN-US> <b><i>&nbsp;* adds a file entry to the specified directory, using
the same</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>163</span></u><span
lang=EN-US> <b><i>&nbsp;* semantics as find_entry(). It returns NULL if it
failed.</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>164</span></u><span
lang=EN-US> <b><i>&nbsp;*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>165</span></u><span
lang=EN-US> <b><i>&nbsp;* NOTE!! The inode part of 'de' is left at 0 - which
means you</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>166</span></u><span
lang=EN-US> <b><i>&nbsp;* may not sleep between calling this and putting something
into</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>167</span></u><span
lang=EN-US> <b><i>&nbsp;* the entry, as someone else might have used it while
you slept.</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>168</span></u><span
lang=EN-US> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; add_entry()</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>ʹÓÃÓë<span
lang=EN-US>find_entry()</span>ͬÑùµÄ·½·¨£¬ÍùÖ¸¶¨Ä¿Â¼ÖÐÌí¼ÓÒ»Ö¸¶¨ÎļþÃûµÄÄ¿</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>¼Ïî¡£Èç¹ûʧ°ÜÔò·µ»Ø<span
lang=EN-US>NULL</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>×¢Ò⣡£¡<span
lang=EN-US>'de'</span>£¨Ö¸¶¨Ä¿Â¼Ïî½á¹¹Ö¸Õ룩µÄ<span lang=EN-US>i</span>½Úµã²¿·Ö±»ÉèÖÃΪ<span
lang=EN-US>0 - </span>Õâ±í</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>ʾÔÚµ÷Óøú¯ÊýºÍÍùĿ¼ÏîÖÐÌí¼ÓÐÅÏ¢Ö®¼ä²»ÄÜȥ˯Ãß¡£
ÒòΪÈç¹û˯Ãߣ¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>ÄÇôÆäËûÈË<span
lang=EN-US>(</span>½ø³Ì<span lang=EN-US>)</span>¿ÉÄÜ»áʹÓÃÁ˸ÃĿ¼Ïî¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>¸ù¾ÝÖ¸¶¨µÄĿ¼ºÍÎļþÃûÌí¼ÓĿ¼Ïî¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>dir
- </span>Ö¸¶¨Ä¿Â¼µÄ<span lang=EN-US>i</span>½Úµã£»<span lang=EN-US>name - </span>ÎļþÃû£»<span
lang=EN-US>namelen - </span>ÎļþÃû³¤¶È£»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º¸ßËÙ»º³åÇøÖ¸Õ룻<span
lang=EN-US>res_dir - </span>·µ»ØµÄĿ¼Ïî½á¹¹Ö¸Õ룻</p>
<p class=a><u><span lang=EN-US style='color:blue'>169</span></u><span
lang=EN-US> static struct <u><span style='color:blue'>buffer_head</span></u> * <u><span
style='color:blue'>add_entry</span></u>(struct <u><span style='color:blue'>m_inode</span></u>
* dir,</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>170</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char * name,
int namelen, struct <u><span style='color:blue'>dir_entry</span></u> **
res_dir)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>171</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>172</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int block,i;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>173</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>174</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>175</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ͬÑù£¬±¾º¯ÊýÒ»ÉÏÀ´Ò²ÐèÒª¶Ôº¯Êý²ÎÊýµÄÓÐЧÐÔ½øÐÐÅжϺÍÑéÖ¤¡£Èç¹ûÎÒÃÇÔÚÇ°ÃæµÚ<span
lang=EN-US>30</span>ÐÐ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶¨ÒåÁË·ûºÅ³£Êý<span
lang=EN-US>NO_TRUNCATE</span>£¬ÄÇôÈç¹ûÎļþÃû³¤¶È³¬¹ý×î´ó³¤¶È<span lang=EN-US>NAME_LEN</span>£¬Ôò²»Óè´¦Àí¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûûÓж¨Òå¹ý<span
lang=EN-US>NO_TRUNCATE</span>£¬ÄÇôÔÚÎļþÃû³¤¶È³¬¹ý×î´ó³¤¶È<span lang=EN-US>NAME_LEN</span>ʱ½Ø¶ÌÖ®¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>176</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *res_dir = <u><span
style='color:blue'>NULL</span></u>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>ÓÃÓÚ·µ»ØÄ¿Â¼Ïî½á¹¹Ö¸Õë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>177</span></u><span
lang=EN-US> #ifdef NO_TRUNCATE</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>178</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (namelen &gt; <u><span
style='color:blue'>NAME_LEN</span></u>)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>179</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>180</span></u><span
lang=EN-US> #else</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>181</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if (namelen &gt; <u><span
style='color:blue'>NAME_LEN</span></u>)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>182</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
namelen = <u><span style='color:blue'>NAME_LEN</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>183</span></u><span
lang=EN-US> #endif</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÎÒÃÇ¿ªÊ¼²Ù×÷£¬ÏòÖ¸¶¨Ä¿Â¼ÖÐÌí¼ÓÒ»¸öÖ¸¶¨ÎļþÃûµÄĿ¼Ïî¡£Òò´ËÎÒÃÇÐèÒªÏȶÁȡĿ¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄÊý¾Ý£¬¼´È¡³öĿ¼<span
lang=EN-US>i</span>½Úµã¶ÔÓ¦¿éÉ豸Êý¾ÝÇøÖеÄÊý¾Ý¿é£¨Âß¼­¿é£©ÐÅÏ¢¡£ÕâЩÂß¼­¿éµÄ¿é</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ºÅ±£´æÔÚ<span lang=EN-US>i</span>½Úµã½á¹¹µÄ
<span lang=EN-US>i_zone[9]</span>Êý×éÖС£ÎÒÃÇÏÈÈ¡ÆäÖеÚ<span lang=EN-US>1</span>¸ö¿éºÅ¡£Èç¹ûĿ¼<span
lang=EN-US>i</span>½ÚµãÖ¸Ïò</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄµÚÒ»¸öÖ±½Ó´ÅÅÌ¿éºÅΪ<span
lang=EN-US>0</span>£¬Ôò˵Ã÷¸ÃĿ¼¾¹È»²»º¬Êý¾Ý£¬Õâ²»Õý³£¡£ÓÚÊÇ·µ»Ø<span lang=EN-US>NULL</span>Í˳ö¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·ñÔòÎÒÃǾʹӽڵãËùÔÚÉ豸¶Áȡָ¶¨µÄĿ¼ÏîÊý¾Ý¿é¡£µ±È»£¬Èç¹û²»³É¹¦£¬ÔòÒ²·µ»Ø<span
lang=EN-US>NULL</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Í˳ö¡£ÁíÍ⣬Èç¹û²ÎÊýÌṩµÄÎļþÃû³¤¶ÈµÈÓÚ<span
lang=EN-US>0</span>£¬ÔòÒ²·µ»Ø<span lang=EN-US>NULL</span>Í˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>184</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!namelen)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>185</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>186</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(block =
dir-&gt;i_zone[0]))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>187</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>188</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(bh = <u><span
style='color:blue'>bread</span></u>(dir-&gt;i_dev,block)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>189</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´ËʱÎÒÃǾÍÔÚÕâ¸öĿ¼<span
lang=EN-US>i</span>½ÚµãÊý¾Ý¿éÖÐÑ­»·²éÕÒ×îºóδʹÓõĿÕĿ¼Ïî¡£Ê×ÏÈÈÃĿ¼Ïî½á¹¹</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ö¸Õë<span lang=EN-US>de</span>Ö¸Ïò»º³å¿éÖеÄÊý¾Ý¿é²¿·Ö£¬¼´µÚÒ»¸öĿ¼Ïî´¦¡£ÆäÖÐ<span
lang=EN-US>i</span>ÊÇĿ¼ÖеÄĿ¼ÏîË÷ÒýºÅ£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔÚÑ­»·¿ªÊ¼Ê±³õʼ»¯Îª<span
lang=EN-US>0</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>190</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>191</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de = (struct <u><span
style='color:blue'>dir_entry</span></u> *) bh-&gt;b_data;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>192</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (1) {</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûµ±Ç°Ä¿Â¼ÏîÊý¾Ý¿éÒѾ­ËÑË÷Íê±Ï£¬µ«»¹Ã»ÓÐÕÒµ½ÐèÒªµÄ¿ÕĿ¼ÏÔòÊͷŵ±Ç°Ä¿Â¼ÏîÊý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¾Ý¿é£¬ÔÙ¶ÁÈëĿ¼µÄÏÂÒ»¸öÂß¼­¿é¡£Èç¹û¶ÔÓ¦µÄÂß¼­¿é²»´æÔھʹ´½¨Ò»¿é¡£Èô¶ÁÈ¡»ò´´½¨²Ù</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>×÷ʧ°ÜÔò·µ»Ø¿Õ¡£Èç¹û´Ë´Î¶ÁÈ¡µÄ´ÅÅÌÂß¼­¿éÊý¾Ý·µ»ØµÄ»º³å¿éÖ¸ÕëΪ¿Õ£¬ËµÃ÷Õâ¿éÂß¼­¿é</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¿ÉÄÜÊÇÒòΪ²»´æÔÚ¶øÐ´´½¨µÄ¿Õ¿é£¬Ôò°ÑĿ¼ÏîË÷ÒýÖµ¼ÓÉÏÒ»¿éÂß¼­¿éËùÄÜÈÝÄɵÄĿ¼ÏîÊý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // DIR_ENTRIES_PER_BLOCK</span>£¬ÓÃÒÔÌø¹ý¸Ã¿é²¢¼ÌÐøËÑË÷¡£·ñÔò˵Ã÷жÁÈëµÄ¿éÉÏÓÐĿ¼ÏîÊý¾Ý£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÓÚÊÇÈÃĿ¼Ïî½á¹¹Ö¸Õë<span
lang=EN-US>de</span>Ö¸Ïò¸Ã¿éµÄ»º³å¿éÊý¾Ý²¿·Ö£¬È»ºóÔÚÆäÖмÌÐøËÑË÷¡£ÆäÖÐ<span lang=EN-US>196</span>ÐÐ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>É쵀 <span lang=EN-US>i/DIR_ENTRIES_PER_BLOCK
</span>¿É¼ÆËãµÃµ½µ±Ç°ËÑË÷µÄĿ¼Ïî<span lang=EN-US>i </span>ËùÔÚĿ¼ÎļþÖеĿéºÅ£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶ø<span lang=EN-US>create_block()</span>º¯Êý£¨<span
lang=EN-US>inode.c</span>£¬µÚ<span lang=EN-US>147</span>ÐУ©Ôò¿É¶ÁÈ¡»ò´´½¨³öÔÚÉ豸É϶ÔÓ¦µÄÂß¼­¿é¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>193</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ((char *)de &gt;= <u><span style='color:blue'>BLOCK_SIZE</span></u>+bh-&gt;b_data)
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>194</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>195</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
bh = <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>196</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
block = <u><span style='color:blue'>create_block</span></u>(dir,i/<u><span
style='color:blue'>DIR_ENTRIES_PER_BLOCK</span></u>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>197</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!block)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>198</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>199</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!(bh = <u><span style='color:blue'>bread</span></u>(dir-&gt;i_dev,block)))
{ // </span>Èô¿ÕÔòÌø¹ý¸Ã¿é¼ÌÐø¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>200</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
i += <u><span style='color:blue'>DIR_ENTRIES_PER_BLOCK</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>201</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
continue;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>202</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>203</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de = (struct <u><span style='color:blue'>dir_entry</span></u> *) bh-&gt;b_data;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>204</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûµ±Ç°Ëù²Ù×÷µÄĿ¼ÏîÐòºÅ<span
lang=EN-US>i</span>³ËÉÏĿ¼½á¹¹´óСËùµÄ³¤¶ÈÖµÒѾ­³¬¹ýÁ˸ÃĿ¼<span lang=EN-US>i</span>½ÚµãÐÅÏ¢</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ËùÖ¸³öµÄĿ¼Êý¾Ý³¤¶ÈÖµ <span
lang=EN-US>i_size </span>£¬Ôò˵Ã÷Õû¸öĿ¼ÎļþÊý¾ÝÖÐûÓÐÓÉÓÚɾ³ýÎļþÁôϵĿÕ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼ÏÒò´ËÎÒÃÇÖ»ÄܰÑÐèÒªÌí¼ÓµÄÐÂĿ¼Ï¼Óµ½Ä¿Â¼ÎļþÊý¾ÝµÄÄ©¶Ë´¦¡£ÓÚÊǶԸô¦Ä¿</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼Ïî½øÐÐÉèÖã¨ÖøÃĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãÖ¸ÕëΪ¿Õ£©£¬²¢¸üиÃĿ¼ÎļþµÄ³¤¶ÈÖµ£¨¼ÓÉÏÒ»¸öÄ¿</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼ÏîµÄ³¤¶È£©£¬È»ºóÉèÖÃĿ¼µÄ<span
lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾£¬ÔÙ¸üиÃĿ¼µÄ¸Ä±äʱ¼äΪµ±Ç°Ê±¼ä¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>205</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (i*sizeof(struct <u><span style='color:blue'>dir_entry</span></u>) &gt;=
dir-&gt;i_size) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>206</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de-&gt;inode=0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>207</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
dir-&gt;i_size = (i+1)*sizeof(struct <u><span style='color:blue'>dir_entry</span></u>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>208</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
dir-&gt;i_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>209</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
dir-&gt;i_ctime = <u><span style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>210</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èôµ±Ç°ËÑË÷µÄĿ¼Ïî <span
lang=EN-US>de </span>µÄ<span lang=EN-US>i</span>½ÚµãΪ¿Õ£¬Ôò±íʾÕÒµ½Ò»¸ö»¹Î´Ê¹ÓõĿÕÏÐĿ¼Ïî»òÊÇÌí¼ÓµÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÐÂĿ¼Ïî¡£ÓÚÊǸüÐÂĿ¼µÄÐÞ¸Äʱ¼äΪµ±Ç°Ê±¼ä£¬²¢´ÓÓû§Êý¾ÝÇø¸´ÖÆÎļþÃûµ½¸ÃĿ¼ÏîµÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÎļþÃû×ֶΣ¬Öú¬Óб¾Ä¿Â¼ÏîµÄÏàÓ¦¸ßËÙ»º³å¿éÒÑÐ޸ıêÖ¾¡£·µ»Ø¸ÃĿ¼ÏîµÄÖ¸ÕëÒÔ¼°¸Ã¸ß</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ËÙ»º³å¿éµÄÖ¸Õ룬Í˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>211</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!de-&gt;inode) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>212</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
dir-&gt;i_mtime = <u><span style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>213</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
for (i=0; i &lt; <u><span style='color:blue'>NAME_LEN</span></u> ; i++)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>214</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de-&gt;name[i]=(i&lt;namelen)?<u><span style='color:blue'>get_fs_byte</span></u>(name+i):0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>215</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
bh-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>216</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*res_dir = de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>217</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>218</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>219</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;// </span>Èç¹û¸ÃĿ¼ÏîÒѾ­±»Ê¹Óã¬Ôò¼ÌÐø¼ì²âÏÂÒ»¸öĿ¼Ïî¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>220</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
i++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>221</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>±¾º¯ÊýÖ´Ðв»µ½ÕâÀï¡£ÕâÒ²ÐíÊÇ<span
lang=EN-US>Linus</span>ÔÚдÕâ¶Î´úÂëʱ£¬Ïȸ´ÖÆÁËÉÏÃæ<span lang=EN-US>find_entry()</span>º¯Êý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ´úÂ룬¶øºóÐ޸ijɱ¾º¯ÊýµÄ<span
lang=EN-US style='font-family:Wingdings'>J</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>222</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>223</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <u><span
style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>224</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>225</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>²éÕÒ·ûºÅÁ´½ÓµÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>dir
- </span>Ŀ¼<span lang=EN-US>i</span>½Úµã£»<span lang=EN-US>inode - </span>Ŀ¼Ïî<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º·µ»Ø·ûºÅÁ´½Óµ½ÎļþµÄ<span
lang=EN-US>i</span>½ÚµãÖ¸Õë¡£³ö´í·µ»Ø<span lang=EN-US>NULL</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>226</span></u><span
lang=EN-US> static struct <u><span style='color:blue'>m_inode</span></u> * <u><span
style='color:blue'>follow_link</span></u>(struct <u><span style='color:blue'>m_inode</span></u>
* dir, struct <u><span style='color:blue'>m_inode</span></u> * inode)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>227</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>228</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned short fs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>ÓÃÓÚÁÙʱ±£´æ<span lang=EN-US>fs</span>¶Î¼Ä´æÆ÷Öµ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>229</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>230</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏÈÅжϺ¯Êý²ÎÊýµÄÓÐЧÐÔ¡£Èç¹ûûÓиø³öĿ¼<span
lang=EN-US>i</span>½Úµã£¬ÎÒÃǾÍʹÓýø³ÌÈÎÎñ½á¹¹ÖÐÉèÖõÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸ù<span lang=EN-US>i</span>½Úµã£¬²¢°ÑÁ´½ÓÊýÔö<span
lang=EN-US>1</span>¡£Èç¹ûûÓиø³öĿ¼Ïî<span lang=EN-US>i</span>½Úµã£¬Ôò·Å»ØÄ¿Â¼<span lang=EN-US>i</span>½Úµãºó·µ»Ø<span
lang=EN-US>NULL</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûÖ¸¶¨Ä¿Â¼Ïî²»ÊÇÒ»¸ö·ûºÅÁ´½Ó£¬¾ÍÖ±½Ó·µ»ØÄ¿Â¼Ïî¶ÔÓ¦µÄ<span
lang=EN-US>i</span>½Úµã<span lang=EN-US>inode</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>231</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!dir) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>232</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
dir = <u><span style='color:blue'>current</span></u>-&gt;root;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>233</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
dir-&gt;i_count++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>234</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>235</span></u><span
lang=EN-US>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!inode) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>236</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>237</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>238</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>239</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>S_ISLNK</span></u>(inode-&gt;i_mode)) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>240</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>241</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>242</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÈ¡<span lang=EN-US>fs</span>¶Î¼Ä´æÆ÷Öµ¡£<span
lang=EN-US>fs</span>ͨ³£±£´æ×ÅÖ¸ÏòÈÎÎñÊý¾Ý¶ÎµÄÑ¡Ôñ·û<span lang=EN-US>0x17</span>¡£Èç¹û<span
lang=EN-US>fs</span>ûÓÐÖ¸ÏòÓû§</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Êý¾Ý¶Î£¬»òÕ߸ø³öµÄĿ¼Ïî<span
lang=EN-US>i</span>½ÚµãµÚ<span lang=EN-US>1</span>¸öÖ±½Ó¿é¿éºÅµÈÓÚ<span lang=EN-US>0</span>£¬»òÕßÊǶÁÈ¡µÚ<span
lang=EN-US>1</span>¸öÖ±½Ó¿é³ö´í£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ôò·Å»Ø<span lang=EN-US>dir</span>ºÍ<span
lang=EN-US>inode</span>Á½¸ö<span lang=EN-US>i</span>½Úµã²¢·µ»Ø<span lang=EN-US>NULL</span>Í˳ö¡£·ñÔò˵Ã÷ÏÖÔÚ<span
lang=EN-US>fs</span>ÕýÖ¸ÏòÓû§Êý¾Ý¶Î¡¢²¢ÇÒ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÎÒÃÇÒѾ­³É¹¦µØ¶ÁÈ¡ÁËÕâ¸ö·ûºÅÁ´½ÓĿ¼ÏîµÄÎļþÄÚÈÝ£¬²¢ÇÒÎļþÄÚÈÝÒѾ­ÔÚ
<span lang=EN-US>bh </span>Ö¸ÏòµÄ»º³å</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¿éÊý¾ÝÇøÖС£Êµ¼ÊÉÏ£¬Õâ¸ö»º³å¿éÊý¾ÝÇøÖнö°üº¬Ò»¸öÁ´½ÓÖ¸ÏòµÄÎļþ·¾¶Ãû×Ö·û´®¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>243</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __asm__(<i>&quot;mov
%%fs,%0&quot;</i>:<i>&quot;=r&quot;</i> (fs));</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>244</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fs != 0x17 ||
!inode-&gt;i_zone[0] ||</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>245</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!(bh = <u><span style='color:blue'>bread</span></u>(inode-&gt;i_dev,
inode-&gt;i_zone[0]))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>246</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>247</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>248</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>249</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´ËʱÎÒÃÇÒѾ­²»ÐèÒª·ûºÅÁ´½ÓĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãÁË£¬ÓÚÊǰÑËü·Å»Ø¡£ÏÖÔÚÅöµ½Ò»¸öÎÊÌ⣬ÄǾÍ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÊÇÄں˺¯Êý´¦ÀíµÄÓû§Êý¾Ý¶¼ÊÇ´æ·ÅÔÚÓû§Êý¾Ý¿Õ¼äÖе쬲¢Ê¹ÓÃÁË
<span lang=EN-US>fs </span>¶Î¼Ä´æÆ÷À´´ÓÓû§</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¿Õ¼ä´«µÝÊý¾Ýµ½Äں˿ռäÖС£¶øÕâÀïÐèÒª´¦ÀíµÄÊý¾ÝÈ´ÔÚÄں˿ռäÖС£Òò´ËΪÁËÕýÈ·µØ´¦Àí</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>λÓÚÄÚºËÖеÄÓû§Êý¾Ý£¬ÎÒÃÇÐèÒªÈÃ<span
lang=EN-US>fs</span>¶Î¼Ä´æÆ÷ÁÙʱָÏòÄں˿ռ䣬¼´ÈÃ<span lang=EN-US>fs =0x10</span>¡£²¢ÔÚ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µ÷Óú¯Êý´¦ÀíÍêºóÔÙ»Ö¸´Ô­<span
lang=EN-US>fs</span>µÄÖµ¡£×îºóÊÍ·ÅÏàÓ¦»º³å¿é£¬²¢·µ»Ø <span lang=EN-US>_namei()</span>½âÎöµÃµ½µÄ·û</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ºÅÁ´½ÓÖ¸ÏòµÄÎļþ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>250</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><span
style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>251</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __asm__(<i>&quot;mov
%0,%%fs&quot;</i>::<i>&quot;r&quot;</i> ((unsigned short) 0x10));</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>252</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode = <u><span
style='color:blue'>_namei</span></u>(bh-&gt;b_data,dir,0);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>253</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __asm__(<i>&quot;mov
%0,%%fs&quot;</i>::<i>&quot;r&quot;</i> (fs));</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>254</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>255</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>256</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>257</span></u><span
lang=EN-US> </span></p>
<p class=a><u><span lang=EN-US style='color:blue'>258</span></u><span
lang=EN-US> <b><i>/*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>259</span></u><span
lang=EN-US> <b><i>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get_dir()</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>260</span></u><span
lang=EN-US> <b><i>&nbsp;*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>261</span></u><span
lang=EN-US> <b><i>&nbsp;* Getdir traverses the pathname until it hits the
topmost directory.</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>262</span></u><span
lang=EN-US> <b><i>&nbsp;* It returns NULL on failure.</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>263</span></u><span
lang=EN-US> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;
get_dir()</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>¸Ãº¯Êý¸ù¾Ý¸ø³öµÄ·¾¶Ãû½øÐÐËÑË÷£¬Ö±µ½´ïµ½×î¶¥¶ËµÄĿ¼¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>Èç¹ûʧ°ÜÔò·µ»Ø<span
lang=EN-US>NULL</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>´ÓÖ¸¶¨Ä¿Â¼¿ªÊ¼ËÑѰָ¶¨Â·¾¶ÃûµÄĿ¼£¨»òÎļþÃû£©µÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>pathname
- </span>·¾¶Ãû£»<span lang=EN-US>inode - </span>Ö¸¶¨ÆðʼĿ¼µÄ<span lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£ºÄ¿Â¼»òÎļþµÄ<span
lang=EN-US>i</span>½ÚµãÖ¸Õ롣ʧ°Üʱ·µ»Ø<span lang=EN-US>NULL</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>264</span></u><span
lang=EN-US> static struct <u><span style='color:blue'>m_inode</span></u> * <u><span
style='color:blue'>get_dir</span></u>(const char * pathname, struct <u><span
style='color:blue'>m_inode</span></u> * inode)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>265</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>266</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char c;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>267</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char * <u><span
style='color:blue'>thisname</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>268</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>269</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int namelen,inr;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>270</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>271</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * dir;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>272</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏÈÅжϲÎÊýÓÐЧÐÔ¡£Èç¹û¸ø³öµÄÖ¸¶¨Ä¿Â¼µÄ<span
lang=EN-US>i</span>½ÚµãÖ¸Õë<span lang=EN-US>inode</span>Ϊ¿Õ£¬ÔòʹÓõ±Ç°½ø³ÌµÄµ±</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ǰ¹¤×÷Ŀ¼<span lang=EN-US>i</span>½Úµã¡£Èç¹ûÓû§Ö¸¶¨Â·¾¶ÃûµÄµÚ<span
lang=EN-US>1</span>¸ö×Ö·ûÊÇ<span lang=EN-US>'/'</span>£¬Ôò˵Ã÷·¾¶ÃûÊǾø¶Ô·¾¶Ãû¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔòÓ¦¸Ã´Óµ±Ç°½ø³ÌÈÎÎñ½á¹¹ÖÐÉèÖõĸù£¨»òα¸ù£©<span
lang=EN-US>i</span>½Úµã¿ªÊ¼²Ù×÷¡£ÓÚÊÇÎÒÃÇÐèÒªÏȷŻزÎ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÊýÖ¸¶¨µÄ»òÕßÉ趨µÄĿ¼<span
lang=EN-US>i</span>½Úµã£¬²¢È¡µÃ½ø³ÌʹÓõĸù<span lang=EN-US>i</span>½Úµã¡£È»ºó°Ñ¸Ã<span
lang=EN-US>i</span>½ÚµãµÄÒýÓüÆÊý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼Ó<span lang=EN-US>1</span>£¬²¢É¾³ý·¾¶ÃûµÄµÚ<span
lang=EN-US>1</span>¸ö×Ö·û <span lang=EN-US>'/'</span>¡£ÕâÑù¾Í¿ÉÒÔ±£Ö¤µ±Ç°½ø³ÌÖ»ÄÜÒÔÆäÉ趨µÄ¸ù<span
lang=EN-US>i</span>½Úµã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>×÷ΪËÑË÷µÄÆðµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>273</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!inode) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>274</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode = <u><span style='color:blue'>current</span></u>-&gt;pwd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>½ø³ÌµÄµ±Ç°¹¤×÷Ŀ¼<span lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>275</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_count++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>276</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>277</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((c=<u><span
style='color:blue'>get_fs_byte</span></u>(pathname))==<i>'/'</i>) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>278</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>·Å»ØÔ­<span lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>279</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode = <u><span style='color:blue'>current</span></u>-&gt;root;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>Ϊ½ø³ÌÖ¸¶¨µÄ¸ù<span lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>280</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pathname++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>281</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_count++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>282</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÕë¶Ô·¾¶ÃûÖеĸ÷¸öĿ¼Ãû²¿·ÖºÍÎļþÃû½øÐÐÑ­»·´¦Àí¡£ÔÚÑ­»·´¦Àí¹ý³ÌÖУ¬ÎÒÃÇÏÈÒª</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶Ôµ±Ç°ÕýÔÚ´¦ÀíµÄĿ¼Ãû²¿·ÖµÄ <span
lang=EN-US>i</span>½Úµã½øÐÐÓÐЧÐÔÅжϣ¬²¢ÇҰѱäÁ¿<span lang=EN-US>thisname </span>Ö¸Ïòµ±Ç°Õý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔÚ´¦ÀíµÄĿ¼Ãû²¿·Ö¡£Èç¹û¸Ã<span
lang=EN-US>i</span>½Úµã±íÃ÷µ±Ç°´¦ÀíµÄĿ¼Ãû²¿·Ö²»ÊÇĿ¼ÀàÐÍ£¬»òÕßûÓпÉ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½øÈë¸ÃĿ¼µÄ·ÃÎÊÐí¿É£¬Ôò·Å»Ø¸Ã<span
lang=EN-US>i</span>½Úµã£¬²¢·µ»Ø<span lang=EN-US>NULL</span>Í˳ö¡£ µ±È»ÔÚ¸Õ½øÈëÑ­»·Ê±£¬µ±Ç°</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼µÄ<span lang=EN-US>i</span>½Úµã<span
lang=EN-US>inode</span>¾ÍÊǽø³Ì¸ù<span lang=EN-US>i</span>½Úµã»òÕßÊǵ±Ç°¹¤×÷Ŀ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬»òÕßÊDzÎÊýÖ¸¶¨µÄij</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸öËÑË÷ÆðʼĿ¼µÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>283</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (1) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>284</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>thisname</span></u> = pathname;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>285</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!<u><span style='color:blue'>S_ISDIR</span></u>(inode-&gt;i_mode) || !<u><span
style='color:blue'>permission</span></u>(inode,<u><span style='color:blue'>MAY_EXEC</span></u>))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>286</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><span
style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>287</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>288</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÿ´ÎÑ­»·ÎÒÃÇ´¦Àí·¾¶ÃûÖÐÒ»¸öĿ¼Ãû£¨»òÎļþÃû£©²¿·Ö¡£Òò´ËÔÚÿ´ÎÑ­»·ÖÐÎÒÃǶ¼Òª´Ó·</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¾¶Ãû×Ö·û´®ÖзÖÀë³öÒ»¸öĿ¼Ãû£¨»òÎļþÃû£©¡£·½·¨ÊÇ´Óµ±Ç°Â·¾¶ÃûÖ¸Õë
<span lang=EN-US>pathname </span>¿ªÊ¼´¦</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ËÑË÷¼ì²â×Ö·û£¬Ö±µ½×Ö·ûÊÇÒ»¸ö½áβ·û£¨<span
lang=EN-US>NULL</span>£©»òÕßÊÇÒ»¸ö<span lang=EN-US>'/'</span>×Ö·û¡£´Ëʱ±äÁ¿ <span
lang=EN-US>namelen </span>Õý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ºÃÊǵ±Ç°´¦ÀíĿ¼Ãû²¿·ÖµÄ³¤¶È£¬¶ø±äÁ¿ <span
lang=EN-US>thisname </span>ÕýÖ¸Ïò¸ÃĿ¼Ãû²¿·ÖµÄ¿ªÊ¼´¦¡£´ËʱÈç</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¹û×Ö·ûÊǽáβ·û<span
lang=EN-US>NULL</span>£¬Ôò±íÃ÷ÒѾ­ËÑË÷µ½Â·¾¶Ãûĩ⣬²¢Òѵ½´ï×îºóÖ¸¶¨Ä¿Â¼Ãû»òÎļþÃû£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ôò·µ»Ø¸Ã<span lang=EN-US>i</span>½ÚµãÖ¸ÕëÍ˳ö¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>×¢Ò⣡Èç¹û·¾¶ÃûÖÐ×îºóÒ»¸öÃû³ÆÒ²ÊÇÒ»¸öĿ¼Ãû£¬µ«ÆäºóÃæÃ»ÓмÓÉÏ
<span lang=EN-US>'/'</span>×Ö·û£¬Ôòº¯Êý²»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»á·µ»Ø¸Ã×îºóĿ¼ÃûµÄ<span
lang=EN-US>i</span>½Úµã£¡ÀýÈ磺¶ÔÓÚ·¾¶Ãû<span lang=EN-US>/usr/src/linux</span>£¬¸Ãº¯Êý½«Ö»·µ»Ø<span
lang=EN-US>src/</span>Ä¿</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼ÃûµÄ<span lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>289</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
for(namelen=0;(c=<u><span style='color:blue'>get_fs_byte</span></u>(pathname++))&amp;&amp;(c!=<i>'/'</i>);namelen++)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>290</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><i>/* nothing */</i></b> ;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>291</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!c)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>292</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return inode;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ôڵõ½µ±Ç°Ä¿Â¼Ãû²¿·Ö£¨»òÎļþÃû£©ºó£¬ÎÒÃǵ÷ÓòéÕÒĿ¼ÏÊý<span
lang=EN-US>find_entry()</span>ÔÚµ±Ç°´¦</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÀíµÄĿ¼ÖÐѰÕÒÖ¸¶¨Ãû³ÆµÄĿ¼Ïî¡£Èç¹ûûÓÐÕÒµ½£¬Ôò·Å»Ø¸Ã<span
lang=EN-US>i</span>½Úµã£¬²¢·µ»Ø<span lang=EN-US>NULL</span>Í˳ö¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÔÚÕÒµ½µÄĿ¼ÏîÖÐÈ¡³öÆä<span
lang=EN-US>i</span>½ÚµãºÅ<span lang=EN-US>inr</span>ºÍÉ豸ºÅ<span lang=EN-US>idev</span>£¬ÊͷŰüº¬¸ÃĿ¼ÏîµÄ¸ßËÙ»º³å</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¿é²¢·Å»Ø¸Ã<span lang=EN-US>i</span>½Úµã¡£
È»ºóÈ¡½ÚµãºÅ<span lang=EN-US>inr</span>µÄ<span lang=EN-US>i</span>½Úµã<span lang=EN-US>inode</span>£¬²¢ÒÔ¸ÃĿ¼ÏîΪµ±Ç°Ä¿Â¼¼ÌÐøÑ­</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»·´¦Àí·¾¶ÃûÖеÄÏÂһĿ¼Ãû²¿·Ö£¨»òÎļþÃû£©¡£Èç¹ûµ±Ç°´¦ÀíµÄĿ¼ÏîÊÇÒ»¸ö·ûºÅÁ´½Ó</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ãû£¬ÔòʹÓÃ<span lang=EN-US>follow_link()</span>¾Í¿ÉÒԵõ½ÆäÖ¸ÏòµÄĿ¼ÏîÃûµÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>293</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!(bh = <u><span style='color:blue'>find_entry</span></u>(&amp;inode,<u><span
style='color:blue'>thisname</span></u>,namelen,&amp;de))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>294</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>295</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>296</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>297</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inr = de-&gt;inode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>µ±Ç°Ä¿Â¼Ãû²¿·ÖµÄ<span lang=EN-US>i</span>½ÚµãºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>298</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>299</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
dir = inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>300</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!(inode = <u><span style='color:blue'>iget</span></u>(dir-&gt;i_dev,inr)))
{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // </span>È¡<span lang=EN-US>i</span>½ÚµãÄÚÈÝ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>301</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>302</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>303</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>304</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!(inode = <u><span style='color:blue'>follow_link</span></u>(dir,inode)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>305</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>306</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>307</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>308</span></u><span
lang=EN-US> </span></p>
<p class=a><u><span lang=EN-US style='color:blue'>309</span></u><span
lang=EN-US> <b><i>/*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>310</span></u><span
lang=EN-US> <b><i>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir_namei()</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>311</span></u><span
lang=EN-US> <b><i>&nbsp;*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>312</span></u><span
lang=EN-US> <b><i>&nbsp;* dir_namei() returns the inode of the directory of the</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>313</span></u><span
lang=EN-US> <b><i>&nbsp;* specified name, and the name within that directory.</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>314</span></u><span
lang=EN-US> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; dir_namei()</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * dir_namei()</span>º¯Êý·µ»ØÖ¸¶¨Ä¿Â¼ÃûµÄ<span
lang=EN-US>i</span>½ÚµãÖ¸Õ룬ÒÔ¼°ÔÚ×î¶¥²ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>Ŀ¼µÄÃû³Æ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>pathname
- </span>Ŀ¼·¾¶Ãû£»<span lang=EN-US>namelen - </span>·¾¶Ãû³¤¶È£»<span lang=EN-US>name - </span>·µ»ØµÄ×î¶¥²ãĿ¼Ãû¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // base - </span>ËÑË÷ÆðʼĿ¼µÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£ºÖ¸¶¨Ä¿Â¼Ãû×î¶¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½ÚµãÖ¸ÕëºÍ×î¶¥²ãĿ¼Ãû³Æ¼°³¤¶È¡£³ö´íʱ·µ»Ø<span lang=EN-US>NULL</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>×¢Ò⣡£¡ÕâÀï¡°×î¶¥²ãĿ¼¡±ÊÇָ·¾¶ÃûÖÐ×î¿¿½üÄ©¶ËµÄĿ¼¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>315</span></u><span
lang=EN-US> static struct <u><span style='color:blue'>m_inode</span></u> * <u><span
style='color:blue'>dir_namei</span></u>(const char * pathname,</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>316</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int * namelen,
const char ** name, struct <u><span style='color:blue'>m_inode</span></u> *
base)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>317</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>318</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char c;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>319</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>320</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * dir;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>321</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏÈÈ¡µÃÖ¸¶¨Â·¾¶Ãû×î¶¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã¡£È»ºó¶Ô·¾¶Ãû<span lang=EN-US>pathname</span>½øÐÐËÑË÷¼ì²â£¬²é³ö×îºó</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ò»¸ö<span lang=EN-US>'/'</span>×Ö·ûºóÃæµÄÃû×Ö×Ö·û´®£¬¼ÆËãÆä³¤¶È£¬²¢ÇÒ·µ»Ø×î¶¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½ÚµãÖ¸Õë¡£×¢Ò⣡Èç</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¹û·¾¶Ãû×îºóÒ»¸ö×Ö·ûÊÇб¸Ü×Ö·û<span
lang=EN-US>'/'</span>£¬ÄÇô·µ»ØµÄĿ¼ÃûΪ¿Õ£¬²¢ÇÒ³¤¶ÈΪ<span lang=EN-US>0</span>¡£µ«·µ»ØµÄ<span
lang=EN-US>i</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½ÚµãÖ¸ÕëÈÔȻָÏò×îºóÒ»¸ö<span
lang=EN-US>'/'</span>×Ö·ûǰĿ¼ÃûµÄ<span lang=EN-US>i</span>½Úµã¡£²Î¼ûµÚ<span lang=EN-US>289</span>ÐÐÉϵġ°×¢Ò⡱˵Ã÷¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>322</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(dir = <u><span
style='color:blue'>get_dir</span></u>(pathname,base)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// base</span>ÊÇÖ¸¶¨µÄÆðʼĿ¼<span lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>323</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>324</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; basename =
pathname;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>325</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (c=<u><span
style='color:blue'>get_fs_byte</span></u>(pathname++))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>326</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (c==<i>'/'</i>)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>327</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
basename=pathname;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>328</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *namelen =
pathname-basename-1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>329</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *name = basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>330</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return dir;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>331</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>332</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>ȡָ¶¨Â·¾¶ÃûµÄ<span
lang=EN-US>i</span>½ÚµãÄÚ²¿º¯Êý¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>pathname
- </span>·¾¶Ãû£»<span lang=EN-US>base - </span>ËÑË÷ÆðµãĿ¼<span lang=EN-US>i</span>½Úµã£»<span
lang=EN-US>follow_links - </span>ÊÇ·ñ¸úËæ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·ûºÅÁ´½ÓµÄ±êÖ¾£¬<span
lang=EN-US>1 - </span>ÐèÒª£¬<span lang=EN-US>0</span>²»ÐèÒª¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º¶ÔÓ¦µÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>333</span></u><span
lang=EN-US> struct <u><span style='color:blue'>m_inode</span></u> * <u><span
style='color:blue'>_namei</span></u>(const char * pathname, struct <u><span
style='color:blue'>m_inode</span></u> * base,</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>334</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int follow_links)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>335</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>336</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>337</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int inr,namelen;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>338</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>339</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>340</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>341</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏȲéÕÒÖ¸¶¨Â·¾¶ÃûÖÐ×î¶¥²ãĿ¼µÄĿ¼Ãû²¢µÃµ½Æä<span
lang=EN-US>i</span>½Úµã¡£Èô²»´æÔÚ£¬Ôò·µ»Ø<span lang=EN-US>NULL</span>Í˳ö¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹û·µ»ØµÄ×î¶¥²ãÃû×ֵij¤¶ÈÊÇ<span
lang=EN-US>0</span>£¬Ôò±íʾ¸Ã·¾¶ÃûÒÔÒ»¸öĿ¼ÃûΪ×îºóÒ»Ïî¡£Òò´Ë˵Ã÷ÎÒ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÃÇÒѾ­ÕÒµ½¶ÔӦĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬¿ÉÒÔÖ±½Ó·µ»Ø¸Ã<span lang=EN-US>i</span>½ÚµãÍ˳ö¡£Èç¹û·µ»ØµÄÃû×Ö³¤¶È²»ÊÇ<span
lang=EN-US>0</span>£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔòÎÒÃÇÒÔÖ¸¶¨µÄÆðʼĿ¼<span
lang=EN-US>base</span>£¬Ôٴε÷ÓÃ<span lang=EN-US>dir_namei()</span>º¯ÊýÀ´ËÑË÷¶¥²ãĿ¼Ãû£¬²¢¸ù¾Ý·µ»Ø</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄÐÅÏ¢×÷ÀàËÆÅжϡ£</p>
<p class=a><u><span lang=EN-US style='color:blue'>311</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(dir = <u><span
style='color:blue'>dir_namei</span></u>(pathname,&amp;namelen,&amp;basename)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>312</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>313</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(!namelen)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><i>/* special case: '/usr/' etc */</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>314</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return dir;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/* </span>¶ÔÓ¦ÓÚ<span lang=EN-US>'/usr/'</span>µÈÇé¿ö<span lang=EN-US> */</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>342</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(base = <u><span
style='color:blue'>dir_namei</span></u>(pathname,&amp;namelen,&amp;basename,base)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>343</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>344</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(!namelen)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><i>/* special case: '/usr/' etc */</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>345</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return base;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÔÚ·µ»ØµÄ¶¥²ãĿ¼ÖÐѰÕÒÖ¸¶¨ÎļþÃûĿ¼ÏîµÄ<span
lang=EN-US>i</span>½Úµã¡£×¢Ò⣡ÒòΪÈç¹û×îºóÒ²ÊÇÒ»¸öÄ¿</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼Ãû£¬µ«ÆäºóûÓмÓ<span
lang=EN-US>'/'</span>£¬Ôò²»»á·µ»Ø¸Ã×îºóĿ¼µÄ<span lang=EN-US>i</span>½Úµã£¡ ÀýÈ磺<span
lang=EN-US>/usr/src/linux</span>£¬½«Ö»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø <span lang=EN-US>src/</span>Ŀ¼ÃûµÄ<span
lang=EN-US>i</span>½Úµã¡£ÒòΪº¯Êý<span lang=EN-US>dir_namei() </span>½«²»ÒÔ<span
lang=EN-US>'/'</span>½áÊøµÄ×îºóÒ»¸öÃû×Öµ±×÷Ò»¸ö</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÎļþÃûÀ´¿´´ý£¬Òò´ËÕâÀïÐèÒªµ¥¶À¶ÔÕâÖÖÇé¿öʹÓÃѰÕÒĿ¼Ïî<span
lang=EN-US>i</span>½Úµãº¯Êý<span lang=EN-US>find_entry()</span>½øÐÐ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´¦Àí¡£´Ëʱ<span lang=EN-US>de</span>Öк¬ÓÐѰÕÒµ½µÄĿ¼ÏîÖ¸Õ룬¶ø<span
lang=EN-US>dir</span>Êǰüº¬¸ÃĿ¼ÏîµÄĿ¼µÄ<span lang=EN-US>i</span>½ÚµãÖ¸Õë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>346</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>find_entry</span></u>(&amp;base,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>347</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>348</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(base);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>349</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>350</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½Ó×ÅÈ¡¸ÃĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãºÅ£¬²¢ÊͷŰüº¬¸ÃĿ¼ÏîµÄ¸ßËÙ»º³å¿é²¢·Å»ØÄ¿Â¼<span lang=EN-US>i</span>½Úµã¡£È»ºóÈ¡</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶ÔÓ¦½ÚµãºÅµÄ<span
lang=EN-US>i</span>½Úµã£¬ÐÞ¸ÄÆä±»·ÃÎÊʱ¼äΪµ±Ç°Ê±¼ä£¬²¢ÖÃÒÑÐ޸ıêÖ¾¡£×îºó·µ»Ø¸Ã<span lang=EN-US>i</span>½Úµã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ö¸Õë<span lang=EN-US>inode</span>¡£Èç¹ûµ±Ç°´¦ÀíµÄĿ¼ÏîÊÇÒ»¸ö·ûºÅÁ´½ÓÃû£¬ÔòʹÓÃ<span
lang=EN-US>follow_link()</span>µÃµ½ÆäÖ¸ÏòµÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼ÏîÃûµÄ<span lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>351</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inr = de-&gt;inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>352</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>353</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(inode = <u><span
style='color:blue'>iget</span></u>(base-&gt;i_dev,inr))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>354</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(base);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>355</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return <u><span style='color:blue'>NULL</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>356</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>357</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (follow_links)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>358</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode = <u><span style='color:blue'>follow_link</span></u>(base,inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>359</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>360</span></u><span
lang=EN-US> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><span
style='color:blue'>iput</span></u>(base);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>361</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_atime=<u><span
style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>362</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt=1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>363</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>364</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>365</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>ȡָ¶¨Â·¾¶ÃûµÄ<span
lang=EN-US>i</span>½Úµã£¬²»¸úËæ·ûºÅÁ´½Ó¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>pathname
- </span>·¾¶Ãû¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º¶ÔÓ¦µÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>366</span></u><span
lang=EN-US> struct <u><span style='color:blue'>m_inode</span></u> * <u><span
style='color:blue'>lnamei</span></u>(const char * pathname)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>367</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>368</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <u><span
style='color:blue'>_namei</span></u>(pathname, <u><span style='color:blue'>NULL</span></u>,
0);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>369</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>370</span></u><span
lang=EN-US> </span></p>
<p class=a><u><span lang=EN-US style='color:blue'>371</span></u><span
lang=EN-US> <b><i>/*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>372</span></u><span
lang=EN-US> <b><i>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namei()</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>373</span></u><span
lang=EN-US> <b><i>&nbsp;*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>374</span></u><span
lang=EN-US> <b><i>&nbsp;* is used by most simple commands to get the inode of a
specified name.</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>375</span></u><span
lang=EN-US> <b><i>&nbsp;* Open, link etc use their own routines, but this is
enough for things</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>376</span></u><span
lang=EN-US> <b><i>&nbsp;* like 'chmod' etc.</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>377</span></u><span
lang=EN-US> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; namei()</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>¸Ãº¯Êý±»Ðí¶à¼òµ¥ÃüÁîÓÃÓÚÈ¡µÃÖ¸¶¨Â·¾¶Ãû³ÆµÄ<span
lang=EN-US>i</span>½Úµã¡£<span lang=EN-US>open</span>¡¢<span lang=EN-US>link</span>µÈÔòʹÓÃËüÃÇ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>×Ô¼ºµÄÏàÓ¦º¯Êý¡£µ«¶ÔÓÚÏóÐÞ¸Äģʽ<span
lang=EN-US>'chmod'</span>µÈÕâÑùµÄÃüÁ¸Ãº¯ÊýÒÑ×ã¹»ÓÃÁË¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>ȡָ¶¨Â·¾¶ÃûµÄ<span
lang=EN-US>i</span>½Úµã£¬¸úËæ·ûºÅÁ´½Ó¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>pathname
- </span>·¾¶Ãû¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º¶ÔÓ¦µÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>378</span></u><span
lang=EN-US> struct <u><span style='color:blue'>m_inode</span></u> * <u><span
style='color:blue'>namei</span></u>(const char * pathname)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>379</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>380</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <u><span
style='color:blue'>_namei</span></u>(pathname,<u><span style='color:blue'>NULL</span></u>,1);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>381</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>382</span></u><span
lang=EN-US> </span></p>
<p class=a><u><span lang=EN-US style='color:blue'>383</span></u><span
lang=EN-US> <b><i>/*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>384</span></u><span
lang=EN-US> <b><i>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open_namei()</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>385</span></u><span
lang=EN-US> <b><i>&nbsp;*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>386</span></u><span
lang=EN-US> <b><i>&nbsp;* namei for open - this is in fact almost the whole
open-routine.</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>387</span></u><span
lang=EN-US> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * &nbsp;&nbsp;&nbsp;&nbsp;open_namei()</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * open()</span>º¯ÊýʹÓõÄ<span
lang=EN-US>namei</span>º¯Êý<span lang=EN-US> - </span>ÕâÆäʵ¼¸ºõÊÇÍêÕûµÄ´ò¿ªÎļþ³ÌÐò¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>Îļþ´ò¿ª<span
lang=EN-US>namei</span>º¯Êý¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý<span lang=EN-US>filename</span>ÊÇÎļþ·¾¶Ãû£¬<span
lang=EN-US>flag</span>ÊÇ´ò¿ªÎļþ±êÖ¾£¬¿Éȡֵ<span lang=EN-US>O_RDONLY</span>£¨Ö»¶Á£©¡¢<span
lang=EN-US>O_WRONLY</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>£¨Ö»Ð´£©»ò<span lang=EN-US>O_RDWR</span>£¨¶Áд£©£¬ÒÔ¼°<span
lang=EN-US>O_CREAT</span>£¨´´½¨£©¡¢<span lang=EN-US>O_EXCL</span>£¨±»´´½¨Îļþ±ØÐë²»´æÔÚ£©¡¢</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // O_APPEND</span>£¨ÔÚÎļþβÌí¼ÓÊý¾Ý£©µÈÆäËûһЩ±êÖ¾µÄ×éºÏ¡£Èç¹û±¾µ÷Óô´½¨ÁËÒ»¸öÐÂÎļþ£¬Ôò</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // mode</span>¾ÍÓÃÓÚÖ¸¶¨ÎļþµÄÐí¿ÉÊôÐÔ¡£ÕâЩÊôÐÔÓÐ<span
lang=EN-US>S_IRWXU</span>£¨ÎļþËÞÖ÷¾ßÓжÁ¡¢Ð´ºÍÖ´ÐÐȨÏÞ£©¡¢</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // S_IRUSR</span>£¨Óû§¾ßÓжÁÎļþȨÏÞ£©¡¢<span
lang=EN-US>S_IRWXG</span>£¨×é³ÉÔ±¾ßÓжÁ¡¢Ð´ºÍÖ´ÐÐȨÏÞ£©µÈµÈ¡£¶ÔÓÚÐÂ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´´½¨µÄÎļþ£¬ÕâЩÊôÐÔÖ»Ó¦ÓÃÓÚ½«À´¶ÔÎļþµÄ·ÃÎÊ£¬´´½¨ÁËÖ»¶ÁÎļþµÄ´ò¿ªµ÷ÓÃÒ²½«·µ»ØÒ»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸ö¿É¶ÁдµÄÎļþ¾ä±ú¡£²Î¼û°üº¬Îļþ<span
lang=EN-US>sys/stat.h</span>¡¢<span lang=EN-US>fcntl.h</span>¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º³É¹¦·µ»Ø<span
lang=EN-US>0</span>£¬·ñÔò·µ»Ø³ö´íÂ룻<span lang=EN-US>res_inode - </span>·µ»Ø¶ÔÓ¦Îļþ·¾¶ÃûµÄ<span
lang=EN-US>i</span>½ÚµãÖ¸Õë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>388</span></u><span
lang=EN-US> int <u><span style='color:blue'>open_namei</span></u>(const char *
pathname, int flag, int mode,</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>389</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> ** res_inode)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>390</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>391</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>392</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
inr,dev,namelen;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>393</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * dir, *inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>394</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>395</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>396</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏȶԺ¯Êý²ÎÊý½øÐкÏÀíµÄ´¦Àí¡£Èç¹ûÎļþ·ÃÎÊģʽ±êÖ¾ÊÇÖ»¶Á£¨<span
lang=EN-US>0</span>£©£¬µ«ÊÇÎļþ½ØÁã±êÖ¾</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // O_TRUNC</span>È´ÖÃλÁË£¬ÔòÔÚÎļþ´ò¿ª±êÖ¾ÖÐÌí¼Óֻд±êÖ¾<span
lang=EN-US>O_WRONLY</span>¡£ÕâÑù×öµÄÔ­ÒòÊÇÓÉÓÚ½ØÁã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>±êÖ¾<span lang=EN-US>O_TRUNC</span>±ØÐëÔÚÎļþ¿ÉдÇé¿öϲÅÓÐЧ¡£È»ºóʹÓõ±Ç°½ø³ÌµÄÎļþ·ÃÎÊÐí¿ÉÆÁ±ÎÂ룬ÆÁ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>±Îµô¸ø¶¨Ä£Ê½ÖеÄÏàӦ룬²¢ÌíÉÏÆÕͨÎļþ±êÖ¾<span
lang=EN-US>I_REGULAR</span>¡£¸Ã±êÖ¾½«ÓÃÓÚ´ò¿ªµÄÎļþ²»´æ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔÚ¶øÐèÒª´´½¨Îļþʱ£¬×÷ΪÐÂÎļþµÄĬÈÏÊôÐÔ¡£²Î¼ûÏÂÃæ<span
lang=EN-US>411</span>ÐÐÉϵÄ×¢ÊÍ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>397</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((flag &amp; <u><span
style='color:blue'>O_TRUNC</span></u>) &amp;&amp; !(flag &amp; <u><span
style='color:blue'>O_ACCMODE</span></u>))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>398</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
flag |= <u><span style='color:blue'>O_WRONLY</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>399</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode &amp;= 0777
&amp; ~current-&gt;<u><span style='color:blue'>umask</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>400</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode |= <u><span
style='color:blue'>I_REGULAR</span></u>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>³£¹æÎļþ±êÖ¾¡£¼û²Î¼û<span lang=EN-US>include/const.h</span>Îļþ£©¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºó¸ù¾ÝÖ¸¶¨µÄ·¾¶ÃûѰÕÒµ½¶ÔÓ¦µÄ<span
lang=EN-US>i</span>½Úµã£¬ÒÔ¼°×î¶¥¶ËĿ¼Ãû¼°Æä³¤¶È¡£´ËʱÈç¹û×î¶¥¶Ë</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼Ãû³¤¶ÈΪ<span
lang=EN-US>0</span>£¨ ÀýÈç<span lang=EN-US>'</span><span lang=EN-US>/usr/' </span>ÕâÖÖ·¾¶ÃûµÄÇé¿ö£©£¬ÄÇôÈô²Ù×÷²»ÊǶÁд¡¢´´½¨ºÍÎļþ³¤</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶È½Ø<span lang=EN-US>0</span>£¬Ôò±íʾÊÇÔÚ´ò¿ªÒ»¸öĿ¼ÃûÎļþ²Ù×÷¡£ÓÚÊÇÖ±½Ó·µ»Ø¸ÃĿ¼µÄ<span
lang=EN-US>i</span>½Úµã²¢·µ»Ø<span lang=EN-US>0</span>Í˳ö¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·ñÔò˵Ã÷½ø³Ì²Ù×÷·Ç·¨£¬ÓÚÊǷŻظÃ<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íÂë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>401</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(dir = <u><span
style='color:blue'>dir_namei</span></u>(pathname,&amp;namelen,&amp;basename,<u><span
style='color:blue'>NULL</span></u>)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>402</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>403</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!namelen)
{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b><i>/* special case: '/usr/' etc */</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>404</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!(flag &amp; (<u><span style='color:blue'>O_ACCMODE</span></u>|<u><span
style='color:blue'>O_CREAT</span></u>|<u><span style='color:blue'>O_TRUNC</span></u>)))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>405</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*res_inode=dir;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>406</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>407</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>408</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>409</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EISDIR</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>410</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½Óןù¾ÝÉÏÃæµÃµ½µÄ×î¶¥²ãĿ¼ÃûµÄ<span
lang=EN-US>i</span>½Úµã<span lang=EN-US>dir</span>£¬ÔÚÆäÖвéÕÒÈ¡µÃ·¾¶Ãû×Ö·û´®ÖÐ×îºóµÄÎÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼þÃû¶ÔÓ¦µÄĿ¼Ïî½á¹¹<span
lang=EN-US>de</span>£¬²¢Í¬Ê±µÃµ½¸ÃĿ¼ÏîËùÔڵĸßËÙ»º³åÇøÖ¸Õë¡£ Èç¹û¸Ã¸ßËÙ»º³å</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ö¸ÕëΪ<span lang=EN-US>NULL</span>£¬Ôò±íʾûÓÐÕÒµ½¶ÔÓ¦ÎļþÃûµÄĿ¼ÏÒò´ËÖ»¿ÉÄÜÊÇ´´½¨Îļþ²Ù×÷¡£
´ËʱÈç</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¹û²»ÊÇ´´½¨Îļþ£¬Ôò·Å»Ø¸ÃĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅÍ˳ö¡£Èç¹ûÓû§ÔÚ¸ÃĿ¼ûÓÐдµÄȨ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Á¦£¬Ôò·Å»Ø¸ÃĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>411</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>find_entry</span></u>(&amp;dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>412</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>413</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!(flag &amp; <u><span style='color:blue'>O_CREAT</span></u>)) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>414</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>415</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>416</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>417</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!<u><span style='color:blue'>permission</span></u>(dir,<u><span
style='color:blue'>MAY_WRITE</span></u>)) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>418</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>419</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EACCES</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>420</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÎÒÃÇÈ·¶¨ÁËÊÇ´´½¨²Ù×÷²¢ÇÒÓÐд²Ù×÷Ðí¿É¡£ Òò´ËÎÒÃǾÍÔÚĿ¼<span
lang=EN-US>i</span>½Úµã¶ÔÓ¦É豸ÉÏÉêÇë</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ò»¸öеÄ<span lang=EN-US>i</span>½Úµã¸øÂ·¾¶ÃûÉÏÖ¸¶¨µÄÎļþʹÓá£
Èôʧ°ÜÔò·Å»ØÄ¿Â¼µÄ<span lang=EN-US>i</span>½Úµã£¬²¢·µ»ØÃ»ÓпÕ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼ä³ö´íÂë¡£·ñÔòʹÓøÃР<span
lang=EN-US>i</span>½Úµã£¬¶ÔÆä½øÐгõʼÉèÖãºÖýڵãµÄÓû§<span lang=EN-US>id</span>£»¶ÔÓ¦½Úµã·ÃÎÊÄ£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ʽ£»ÖÃÒÑÐ޸ıêÖ¾¡£È»ºó²¢ÔÚÖ¸¶¨Ä¿Â¼<span
lang=EN-US>dir</span>ÖÐÌí¼ÓÒ»¸öÐÂĿ¼Ïî¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>421</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode = <u><span style='color:blue'>new_inode</span></u>(dir-&gt;i_dev);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>422</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!inode) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>423</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>424</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>425</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>426</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_uid = <u><span style='color:blue'>current</span></u>-&gt;euid;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>427</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_mode = mode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>428</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>429</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
bh = <u><span style='color:blue'>add_entry</span></u>(dir,basename,namelen,&amp;de);</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹û·µ»ØµÄÓ¦¸Ãº¬ÓÐÐÂĿ¼ÏîµÄ¸ßËÙ»º³åÇøÖ¸ÕëΪ<span
lang=EN-US>NULL</span>£¬Ôò±íʾÌí¼ÓĿ¼Ïî²Ù×÷ʧ°Ü¡£ÓÚÊÇ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½«¸ÃÐÂ<span lang=EN-US>i</span>½ÚµãµÄÒýÓÃÁ¬½Ó¼ÆÊý¼õ<span
lang=EN-US>1</span>£¬·Å»Ø¸Ã<span lang=EN-US>i</span>½ÚµãÓëĿ¼µÄ<span lang=EN-US>i</span>½Úµã²¢·µ»Ø³ö´íÂëÍ˳ö¡£
·ñÔò</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>˵Ã÷Ìí¼ÓĿ¼Ïî²Ù×÷³É¹¦¡£ ÓÚÊÇÎÒÃÇÀ´ÉèÖøÃÐÂĿ¼ÏîµÄһЩ³õʼֵ£ºÖÃ<span
lang=EN-US>i</span>½ÚµãºÅΪÐÂÉêÇë</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µ½µÄ<span lang=EN-US>i</span>½ÚµãµÄºÅÂ룻²¢ÖøßËÙ»º³åÇøÒÑÐ޸ıêÖ¾¡£
È»ºóÊͷŸøßËÙ»º³åÇø£¬·Å»ØÄ¿Â¼µÄ<span lang=EN-US>i</span>½Ú</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µã¡£·µ»ØÐÂĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãÖ¸Õ룬²¢³É¹¦Í˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>430</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>431</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks--;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>432</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>433</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>434</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>435</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>436</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de-&gt;inode = inode-&gt;i_num;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>437</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
bh-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>438</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>439</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>440</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*res_inode = inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>441</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>442</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÈôÉÏÃæ£¨<span lang=EN-US>411</span>ÐУ©ÔÚĿ¼ÖÐÈ¡ÎļþÃû¶ÔӦĿ¼Ïî½á¹¹µÄ²Ù×÷³É¹¦£¨¼´<span
lang=EN-US>bh</span>²»Îª<span lang=EN-US>NULL</span>£©£¬Ôò˵</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ã÷Ö¸¶¨´ò¿ªµÄÎļþÒѾ­´æÔÚ¡£ÓÚÊÇÈ¡³ö¸ÃĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãºÅºÍÆäËùÔÚÉ豸ºÅ£¬²¢ÊͷŸøßËÙ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»º³åÇøÒÔ¼°·Å»ØÄ¿Â¼µÄ<span
lang=EN-US>i</span>½Úµã¡£Èç¹û´Ëʱ¶ÀÕ¼²Ù×÷±êÖ¾<span lang=EN-US>O_EXCL</span>ÖÃ룬µ«ÏÖÔÚÎļþÒѾ­´æÔÚ£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ôò·µ»ØÎļþÒÑ´æÔÚ³ö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>443</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inr = de-&gt;inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>444</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dev =
dir-&gt;i_dev;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>445</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>446</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (flag &amp; <u><span
style='color:blue'>O_EXCL</span></u>) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>447</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>448</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EEXIST</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>449</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÎÒÃǶÁÈ¡¸ÃĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãÄÚÈÝ¡£Èô¸Ã<span lang=EN-US>i</span>½ÚµãÊÇÒ»¸öĿ¼µÄ<span lang=EN-US>i</span>½Úµã²¢ÇÒ·ÃÎÊģʽÊÇÖ»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>д»ò¶Áд£¬»òÕßûÓзÃÎʵÄÐí¿ÉȨÏÞ£¬Ôò·Å»Ø¸Ã<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø·ÃÎÊȨÏÞ³ö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>450</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(inode = <u><span
style='color:blue'>follow_link</span></u>(dir,<u><span style='color:blue'>iget</span></u>(dev,inr))))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>451</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EACCES</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>452</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((<u><span
style='color:blue'>S_ISDIR</span></u>(inode-&gt;i_mode) &amp;&amp; (flag &amp; <u><span
style='color:blue'>O_ACCMODE</span></u>)) ||</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>453</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!<u><span style='color:blue'>permission</span></u>(inode,<u><span
style='color:blue'>ACC_MODE</span></u>(flag))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>454</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>455</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>456</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½Ó×ÅÎÒÃǸüиÃ<span
lang=EN-US>i</span>½ÚµãµÄ·ÃÎÊʱ¼ä×Ö¶ÎֵΪµ±Ç°Ê±¼ä¡£Èç¹ûÉèÁ¢Á˽Ø<span lang=EN-US>0</span>±êÖ¾£¬Ôò½«¸Ã<span
lang=EN-US>i</span>½Ú</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µãµÄÎļþ³¤¶È½ØÎª<span
lang=EN-US>0</span>¡£×îºó·µ»Ø¸ÃĿ¼Ïî<span lang=EN-US>i</span>½ÚµãµÄÖ¸Õ룬²¢·µ»Ø<span lang=EN-US>0</span>£¨³É¹¦£©¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>457</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_atime =
<u><span style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>458</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (flag &amp; <u><span
style='color:blue'>O_TRUNC</span></u>)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>459</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>truncate</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>460</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *res_inode = inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>461</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>462</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>463</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>´´½¨Ò»¸öÉè±¸ÌØÊâÎļþ»òÆÕͨÎļþ½Úµã£¨<span
lang=EN-US>node</span>£©¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp; &nbsp;// </span>¸Ãº¯Êý´´½¨Ãû³ÆÎª<span
lang=EN-US>filename</span>£¬ÓÉ<span lang=EN-US>mode</span>ºÍ<span lang=EN-US>dev</span>Ö¸¶¨µÄÎļþϵͳ½Úµã£¨ÆÕͨÎļþ¡¢Éè±¸ÌØÊâÎÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼þ»òÃüÃû¹ÜµÀ£©¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>filename
- </span>·¾¶Ãû£»<span lang=EN-US>mode - </span>Ö¸¶¨Ê¹ÓÃÐí¿ÉÒÔ¼°Ëù´´½¨½ÚµãµÄÀàÐÍ£»<span lang=EN-US>dev
- </span>É豸ºÅ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º³É¹¦Ôò·µ»Ø<span
lang=EN-US>0</span>£¬·ñÔò·µ»Ø³ö´íÂë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>464</span></u><span
lang=EN-US> int <u><span style='color:blue'>sys_mknod</span></u>(const char *
filename, int mode, int dev)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>465</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>466</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>467</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int namelen;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>468</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * dir, * inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>469</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>470</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>471</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×Ïȼì²é²Ù×÷Ðí¿ÉºÍ²ÎÊýµÄÓÐЧÐÔ²¢È¡Â·¾¶ÃûÖж¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã¡£Èç¹û²»Êdz¬¼¶Óû§£¬Ôò</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø·ÃÎÊÐí¿É³ö´íÂë¡£Èç¹ûÕÒ²»µ½¶ÔӦ·¾¶ÃûÖж¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬Ôò·µ»Ø³ö´íÂë¡£Èç¹û×î</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶¥¶ËµÄÎļþÃû³¤¶ÈΪ<span
lang=EN-US>0</span>£¬Ôò˵Ã÷¸ø³öµÄ·¾¶Ãû×îºóûÓÐÖ¸¶¨ÎļþÃû£¬·Å»Ø¸ÃĿ¼<span lang=EN-US>i</span>½Úµã£¬·µ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»Ø³ö´íÂëÍ˳ö¡£Èç¹ûÔÚ¸ÃĿ¼ÖÐûÓÐдµÄȨÏÞ£¬Ôò·Å»Ø¸ÃĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø·ÃÎÊÐí¿É³ö´í</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÂëÍ˳ö¡£Èç¹û²»Êdz¬¼¶Óû§£¬Ôò·µ»Ø·ÃÎÊÐí¿É³ö´íÂë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>472</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>suser</span></u>())</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>473</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>474</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(dir = <u><span
style='color:blue'>dir_namei</span></u>(filename,&amp;namelen,&amp;basename, <u><span
style='color:blue'>NULL</span></u>)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>475</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>476</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!namelen) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>477</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>478</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>479</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>480</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>permission</span></u>(dir,<u><span style='color:blue'>MAY_WRITE</span></u>))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>481</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>482</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>483</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÎÒÃÇËÑË÷һϷ¾¶ÃûÖ¸¶¨µÄÎļþÊÇ·ñÒѾ­´æÔÚ¡£ÈôÒѾ­´æÔÚÔò²»ÄÜ´´½¨Í¬ÃûÎļþ½Úµã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹û¶ÔӦ·¾¶ÃûÉÏ×îºóµÄÎļþÃûµÄĿ¼ÏîÒѾ­´æÔÚ£¬ÔòÊͷŰüº¬¸ÃĿ¼ÏîµÄ»º³åÇø¿é²¢·Å»Ø</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼µÄ<span lang=EN-US>i</span>½Úµã£¬·µ»ØÎļþÒѾ­´æÔڵijö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>484</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>find_entry</span></u>(&amp;dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>485</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>486</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>487</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>488</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EEXIST</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>489</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·ñÔòÎÒÃǾÍÉêÇëÒ»¸öеÄ<span
lang=EN-US>i</span>½Úµã£¬²¢ÉèÖøÃ<span lang=EN-US>i</span>½ÚµãµÄÊôÐÔģʽ¡£Èç¹ûÒª´´½¨µÄÊÇ¿éÉ豸Îļþ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»òÕßÊÇ×Ö·ûÉ豸Îļþ£¬ÔòÁî<span
lang=EN-US>i</span>½ÚµãµÄÖ±½ÓÂß¼­¿éÖ¸Õë<span lang=EN-US>0</span>µÈÓÚÉ豸ºÅ¡£¼´¶ÔÓÚÉ豸ÎļþÀ´Ëµ£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Æä<span lang=EN-US>i</span>½ÚµãµÄ<span
lang=EN-US>i_zone[0]</span>Öдæ·ÅµÄÊǸÃÉ豸ÎļþËù¶¨ÒåÉ豸µÄÉ豸ºÅ¡£È»ºóÉèÖøÃ<span lang=EN-US>i</span>½ÚµãµÄÐÞ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸Äʱ¼ä¡¢·ÃÎÊʱ¼äΪµ±Ç°Ê±¼ä£¬²¢ÉèÖÃ<span
lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>490</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode = <u><span
style='color:blue'>new_inode</span></u>(dir-&gt;i_dev);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>491</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!inode) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>Èô²»³É¹¦Ôò·Å»ØÄ¿Â¼<span lang=EN-US>i</span>½Úµã£¬·µ»ØÎÞ¿Õ¼ä³ö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>492</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>493</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>494</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>495</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_mode =
mode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>496</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (<u><span
style='color:blue'>S_ISBLK</span></u>(mode) || <u><span style='color:blue'>S_ISCHR</span></u>(mode))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>497</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_zone[0] = dev;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>498</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_mtime =
inode-&gt;i_atime = <u><span style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>499</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt =
1;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½Ó×ÅΪÕâ¸öеÄ<span
lang=EN-US>i</span>½ÚµãÔÚĿ¼ÖÐÐÂÌí¼ÓÒ»¸öĿ¼Ïî¡£Èç¹ûʧ°Ü£¨°üº¬¸ÃĿ¼ÏîµÄ¸ßËÙ»º³å</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¿éÖ¸ÕëΪ<span lang=EN-US>NULL</span>£©£¬Ôò·Å»ØÄ¿Â¼µÄ<span
lang=EN-US>i</span>½Úµã£»°ÑËùÉêÇëµÄ<span lang=EN-US>i</span>½ÚµãÒýÓÃÁ¬½Ó¼ÆÊý¸´Î»£¬²¢·Å»Ø¸Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // i</span>½Úµã£¬·µ»Ø³ö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>500</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>add_entry</span></u>(dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>501</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>502</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>503</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks=0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>504</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>505</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>506</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÌí¼ÓĿ¼Ïî²Ù×÷Ò²³É¹¦ÁË£¬ÓÚÊÇÎÒÃÇÀ´ÉèÖÃÕâ¸öĿ¼ÏîÄÚÈÝ¡£Áî¸ÃĿ¼ÏîµÄ<span
lang=EN-US>i</span>½Úµã×Ö</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶ÎµÈÓÚÐÂ<span lang=EN-US>i</span>½ÚµãºÅ£¬²¢ÖøßËÙ»º³åÇøÒÑÐ޸ıêÖ¾£¬·Å»ØÄ¿Â¼ºÍеÄ<span
lang=EN-US>i</span>½Úµã£¬ÊͷŸßËÙ»º³å</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Çø£¬×îºó·µ»Ø<span
lang=EN-US>0(</span>³É¹¦<span lang=EN-US>)</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>507</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de-&gt;inode =
inode-&gt;i_num;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>508</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>509</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>510</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>511</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>512</span></u><span
lang=EN-US> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>513</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>514</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; ////&nbsp; </span>´´½¨Ò»¸öĿ¼¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>pathname
- </span>·¾¶Ãû£»<span lang=EN-US>mode - </span>Ŀ¼ʹÓõÄȨÏÞÊôÐÔ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º³É¹¦Ôò·µ»Ø<span
lang=EN-US>0</span>£¬·ñÔò·µ»Ø³ö´íÂë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>515</span></u><span
lang=EN-US> int <u><span style='color:blue'>sys_mkdir</span></u>(const char *
pathname, int mode)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>516</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>517</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>518</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int namelen;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>519</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * dir, * inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>520</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh, *dir_block;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>521</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>522</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×Ïȼì²é²ÎÊýµÄÓÐЧÐÔ²¢È¡Â·¾¶ÃûÖж¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã¡£Èç¹ûÕÒ²»µ½¶ÔӦ·¾¶ÃûÖж¥²ãĿ¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ<span lang=EN-US>i</span>½Úµã£¬Ôò·µ»Ø³ö´íÂë¡£Èç¹û×î¶¥¶ËµÄÎļþÃû³¤¶ÈΪ<span
lang=EN-US>0</span>£¬Ôò˵Ã÷¸ø³öµÄ·¾¶Ãû×îºóûÓÐÖ¸</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶¨ÎļþÃû£¬·Å»Ø¸ÃĿ¼<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íÂëÍ˳ö¡£Èç¹ûÔÚ¸ÃĿ¼ÖÐûÓÐдµÄȨÏÞ£¬Ôò·Å»Ø¸Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼µÄ<span lang=EN-US>i</span>½Úµã£¬·µ»Ø·ÃÎÊÐí¿É³ö´íÂëÍ˳ö¡£Èç¹û²»Êdz¬¼¶Óû§£¬Ôò·µ»Ø·ÃÎÊÐí¿É³ö´íÂë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>523</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(dir = <u><span
style='color:blue'>dir_namei</span></u>(pathname,&amp;namelen,&amp;basename, <u><span
style='color:blue'>NULL</span></u>)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>524</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>525</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!namelen) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>526</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>527</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>528</span></u><span
lang=EN-US>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>529</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>permission</span></u>(dir,<u><span style='color:blue'>MAY_WRITE</span></u>))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>530</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>531</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>532</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÎÒÃÇËÑË÷һϷ¾¶ÃûÖ¸¶¨µÄĿ¼ÃûÊÇ·ñÒѾ­´æÔÚ¡£ÈôÒѾ­´æÔÚÔò²»ÄÜ´´½¨Í¬ÃûĿ¼½Úµã¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹û¶ÔӦ·¾¶ÃûÉÏ×îºóµÄĿ¼ÃûµÄĿ¼ÏîÒѾ­´æÔÚ£¬ÔòÊͷŰüº¬¸ÃĿ¼ÏîµÄ»º³åÇø¿é²¢·Å»Ø</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼µÄ<span lang=EN-US>i</span>½Úµã£¬·µ»ØÎļþÒѾ­´æÔڵijö´íÂëÍ˳ö¡£·ñÔòÎÒÃǾÍÉêÇëÒ»¸öеÄ<span
lang=EN-US>i</span>½Úµã£¬²¢ÉèÖÃ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸Ã<span lang=EN-US>i</span>½ÚµãµÄÊôÐÔģʽ£ºÖøÃÐÂ<span
lang=EN-US>i</span>½Úµã¶ÔÓ¦µÄÎļþ³¤¶ÈΪ<span lang=EN-US>32</span>×Ö½Ú £¨<span lang=EN-US>2</span>¸öĿ¼ÏîµÄ´óС£©¡¢ÖÃ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½ÚµãÒÑÐ޸ıêÖ¾£¬ÒÔ¼°½ÚµãµÄÐÞ¸Äʱ¼äºÍ·ÃÎÊʱ¼ä¡£<span
lang=EN-US>2</span>¸öĿ¼Ïî·Ö±ðÓÃÓÚ<span lang=EN-US>'.'</span>ºÍ<span lang=EN-US>'..'</span>Ŀ¼¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>533</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>find_entry</span></u>(&amp;dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>534</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>535</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>536</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>537</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EEXIST</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>538</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>539</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode = <u><span
style='color:blue'>new_inode</span></u>(dir-&gt;i_dev);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>540</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!inode) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>Èô²»³É¹¦Ôò·Å»ØÄ¿Â¼µÄ<span lang=EN-US>i</span>½Úµã£¬·µ»ØÎÞ¿Õ¼ä³ö´íÂë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>541</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>542</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>543</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>544</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_size =
32;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>545</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt =
1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>546</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_mtime =
inode-&gt;i_atime = <u><span style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½Ó×ÅΪ¸ÃÐÂ<span lang=EN-US>i</span>½ÚµãÉêÇëÒ»ÓÃÓÚ±£´æÄ¿Â¼ÏîÊý¾ÝµÄ´ÅÅ̿飬²¢Áî<span
lang=EN-US>i</span>½ÚµãµÄµÚÒ»¸öÖ±½Ó¿éÖ¸ÕëµÈ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÓڸÿéºÅ¡£Èç¹ûÉêÇëʧ°ÜÔò·Å»Ø¶ÔӦĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£»¸´Î»ÐÂÉêÇëµÄ<span lang=EN-US>i</span>½ÚµãÁ¬½Ó¼ÆÊý£»·Å»Ø¸Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>еÄ<span lang=EN-US>i</span>½Úµã£¬·µ»ØÃ»Óпռä³ö´íÂëÍ˳ö¡£·ñÔòÖøÃеÄ<span
lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>547</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(!(inode-&gt;i_zone[0]=<u><span style='color:blue'>new_block</span></u>(inode-&gt;i_dev)))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>548</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>549</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks--;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>550</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>551</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>552</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>553</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt =
1;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´ÓÉ豸É϶ÁÈ¡ÐÂÉêÇëµÄ´ÅÅ̿飨ĿµÄÊǰѶÔÓ¦¿é·Åµ½¸ßËÙ»º³åÇøÖУ©¡£Èô³ö´í£¬Ôò·Å»Ø¶ÔÓ¦</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼µÄ<span lang=EN-US>i</span>½Úµã£»ÊÍ·ÅÉêÇëµÄ´ÅÅ̿飻¸´Î»ÐÂÉêÇëµÄ<span
lang=EN-US>i</span>½ÚµãÁ¬½Ó¼ÆÊý£»·Å»Ø¸ÃеÄ<span lang=EN-US>i</span>½Úµã£¬·µ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»ØÃ»Óпռä³ö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>554</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(dir_block=<u><span
style='color:blue'>bread</span></u>(inode-&gt;i_dev,inode-&gt;i_zone[0]))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>555</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>556</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks--;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>557</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>558</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ERROR</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>559</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÎÒÃÇÔÚ»º³å¿éÖн¨Á¢ÆðËù´´½¨Ä¿Â¼ÎļþÖеÄ<span
lang=EN-US>2</span>¸öĬÈϵÄÐÂĿ¼Ï<span lang=EN-US>'.'</span>ºÍ<span lang=EN-US>'..'</span>£©½á¹¹Êý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¾Ý¡£Ê×ÏÈÁî<span lang=EN-US>de</span>Ö¸Ïò´æ·ÅĿ¼ÏîµÄÊý¾Ý¿é£¬È»ºóÖøÃĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãºÅ×ֶεÈÓÚÐÂÉêÇëµÄ<span lang=EN-US>i</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½ÚµãºÅ£¬Ãû×Ö×ֶεÈÓÚ<span
lang=EN-US>&quot;.&quot;</span>¡£ È»ºó<span lang=EN-US>de</span>Ö¸ÏòÏÂÒ»¸öĿ¼Ïî½á¹¹£¬²¢ÔڸýṹÖдæ·ÅÉϼ¶Ä¿Â¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ <span lang=EN-US>i</span>½ÚµãºÅºÍÃû×Ö<span
lang=EN-US>&quot;..&quot;</span>¡£È»ºóÉèÖøøßËÙ»º³å¿éÒÑÐ޸ıêÖ¾£¬²¢ÊͷŸûº³å¿é¡£ÔÙ³õʼ»¯</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÉèÖÃÐÂ<span lang=EN-US>i</span>½ÚµãµÄģʽ×ֶΣ¬²¢ÖøÃ<span
lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>560</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de = (struct <u><span
style='color:blue'>dir_entry</span></u> *) dir_block-&gt;b_data;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>561</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de-&gt;inode=inode-&gt;i_num;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
</span>ÉèÖÃ<span lang=EN-US>'.'</span>Ŀ¼Ïî¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>562</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>strcpy</span></u>(de-&gt;name,<i>&quot;.&quot;</i>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>563</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>564</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de-&gt;inode =
dir-&gt;i_num;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;// </span>ÉèÖÃ<span lang=EN-US>'..'</span>Ŀ¼Ïî¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>565</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>strcpy</span></u>(de-&gt;name,<i>&quot;..&quot;</i>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>566</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_nlinks
= 2;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>567</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
dir_block-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>568</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(dir_block);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>569</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_mode = <u><span
style='color:blue'>I_DIRECTORY</span></u> | (mode &amp; 0777 &amp;
~current-&gt;<u><span style='color:blue'>umask</span></u>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>570</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt =
1;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÎÒÃÇÔÚÖ¸¶¨Ä¿Â¼ÖÐÐÂÌí¼ÓÒ»¸öĿ¼ÏÓÃÓÚ´æ·Åн¨Ä¿Â¼µÄ<span
lang=EN-US>i</span>½ÚµãºÍĿ¼Ãû¡£Èç¹ûʧ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>°Ü£¨°üº¬¸ÃĿ¼ÏîµÄ¸ßËÙ»º³åÇøÖ¸ÕëΪ<span
lang=EN-US>NULL</span>£©£¬Ôò·Å»ØÄ¿Â¼µÄ<span lang=EN-US>i</span>½Úµã£»ËùÉêÇëµÄ<span lang=EN-US>i</span>½ÚµãÒý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÓÃÁ¬½Ó¼ÆÊý¸´Î»£¬²¢·Å»Ø¸Ã<span
lang=EN-US>i</span>½Úµã¡£·µ»Ø³ö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>571</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>add_entry</span></u>(dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>572</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>573</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><span
style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>574</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks=0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>575</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>576</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>577</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>×îºóÁî¸ÃÐÂĿ¼ÏîµÄ<span
lang=EN-US>i</span>½Úµã×ֶεÈÓÚÐÂ<span lang=EN-US>i</span>½ÚµãºÅ£¬²¢ÖøßËÙ»º³å¿éÒÑÐ޸ıêÖ¾£¬·Å»ØÄ¿Â¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ºÍеÄ<span lang=EN-US>i</span>½Úµã£¬ÊͷŸßËÙ»º³åÇø£¬×îºó·µ»Ø<span
lang=EN-US>0</span>£¨³É¹¦£©¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>578</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de-&gt;inode =
inode-&gt;i_num;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>579</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>580</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir-&gt;i_nlinks++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>581</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir-&gt;i_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>582</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>583</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>584</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>585</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>586</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>587</span></u><span
lang=EN-US> </span></p>
<p class=a><u><span lang=EN-US style='color:blue'>588</span></u><span
lang=EN-US> <b><i>/*</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>589</span></u><span
lang=EN-US> <b><i>&nbsp;* routine to check that the specified directory is
empty (for rmdir)</i></b></span></p>
<p class=a><u><span lang=EN-US style='color:blue'>590</span></u><span
lang=EN-US> <b><i>&nbsp;*/</i></b></span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; /*</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; * </span>ÓÃÓÚ¼ì²éÖ¸¶¨µÄĿ¼ÊÇ·ñΪ¿ÕµÄ×Ó³ÌÐò£¨ÓÃÓÚ<span
lang=EN-US>rmdir</span>ϵͳµ÷Óã©¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp; */</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>¼ì²éÖ¸¶¨Ä¿Â¼ÊÇ·ñ¿Õ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>inode
- </span>Ö¸¶¨Ä¿Â¼µÄ<span lang=EN-US>i</span>½ÚµãÖ¸Õë¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º<span lang=EN-US>1 ¨C
</span>Ŀ¼ÖÐÊǿյģ»<span lang=EN-US>0 - </span>²»¿Õ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>591</span></u><span
lang=EN-US> static int <u><span style='color:blue'>empty_dir</span></u>(struct <u><span
style='color:blue'>m_inode</span></u> * inode)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>592</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>593</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nr,block;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>594</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;int len;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>595</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>596</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>597</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏȼÆËãÖ¸¶¨Ä¿Â¼ÖÐÏÖÓÐĿ¼Ïî¸öÊý²¢¼ì²é¿ªÊ¼Á½¸öÌØ¶¨Ä¿Â¼ÏîÖÐÐÅÏ¢ÊÇ·ñÕýÈ·¡£Ò»¸öĿ¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÖÐÓ¦¸ÃÆðÂëÓÐ<span
lang=EN-US>2</span>¸öĿ¼Ï¼´<span lang=EN-US>&quot;.&quot;</span>ºÍ<span
lang=EN-US>&quot;..&quot;</span>¡£ Èç¹ûĿ¼Ïî¸öÊýÉÙÓÚ<span lang=EN-US>2</span>¸ö»òÕ߸ÃĿ¼<span
lang=EN-US>i</span>½ÚµãµÄµÚ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // 1</span>¸öÖ±½Ó¿éûÓÐÖ¸ÏòÈκδÅÅÌ¿éºÅ£¬»òÕ߸ÃÖ±½Ó¿é¶Á²»³ö£¬ÔòÏÔʾ¾¯¸æÐÅÏ¢¡°É豸<span
lang=EN-US>dev </span>ÉÏÄ¿</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼´í¡±£¬·µ»Ø<span
lang=EN-US>0(</span>ʧ°Ü<span lang=EN-US>)</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>598</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len =
inode-&gt;i_size / sizeof (struct <u><span style='color:blue'>dir_entry</span></u>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// </span>Ŀ¼ÖÐĿ¼Ïî¸öÊý¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>599</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (len&lt;2 ||
!inode-&gt;i_zone[0] ||</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>600</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!(bh=<u><span style='color:blue'>bread</span></u>(inode-&gt;i_dev,inode-&gt;i_zone[0])))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>601</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>printk</span></u>(<i>&quot;warning - bad directory
on dev %04x\n&quot;</i>,inode-&gt;i_dev);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>602</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>603</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´Ëʱ<span lang=EN-US>bh</span>ËùÖ¸»º³å¿éÖк¬ÓÐĿ¼ÏîÊý¾Ý¡£ÎÒÃÇÈÃĿ¼ÏîÖ¸Õë<span
lang=EN-US>de</span>Ö¸Ïò»º³å¿éÖеÚ<span lang=EN-US>1</span>¸öĿ¼Ïî¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶ÔÓÚµÚ<span lang=EN-US>1</span>¸öĿ¼Ï<span
lang=EN-US>&quot;.&quot;</span>£©£¬ËüµÄ<span lang=EN-US>i</span>½ÚµãºÅ×Ö¶Î<span
lang=EN-US>inode</span>Ó¦¸ÃµÈÓÚµ±Ç°Ä¿Â¼µÄ<span lang=EN-US>i</span>½ÚµãºÅ¡£¶ÔÓÚ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÚ<span lang=EN-US>2</span>¸öĿ¼Ï<span
lang=EN-US>&quot;..&quot;</span>£©£¬ËüµÄ<span lang=EN-US>i</span>½ÚµãºÅ×Ö¶Î<span
lang=EN-US> inode </span>Ó¦¸ÃµÈÓÚÉÏÒ»²ãĿ¼µÄ<span lang=EN-US>i</span>½ÚµãºÅ£¬²»»á</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ϊ<span lang=EN-US>0</span>¡£Òò´ËÈç¹ûµÚ<span
lang=EN-US>1</span>¸öĿ¼ÏîµÄ<span lang=EN-US>i</span>½ÚµãºÅ×Ö¶ÎÖµ²»µÈÓÚ¸ÃĿ¼µÄ<span lang=EN-US>i</span>½ÚµãºÅ£¬»òÕßµÚ<span
lang=EN-US>2</span>¸öĿ¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏîµÄ<span lang=EN-US>i</span>½ÚµãºÅ×Ö¶ÎΪÁ㣬»òÕßÁ½¸öĿ¼ÏîµÄÃû×Ö×ֶβ»·Ö±ðµÈÓÚ<span
lang=EN-US>&quot;.&quot;</span>ºÍ<span lang=EN-US>&quot;..&quot;</span>£¬ÔòÏÔʾ³ö´í¾¯</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸æÐÅÏ¢¡°É豸<span
lang=EN-US>dev</span>ÉÏĿ¼´í¡±£¬²¢·µ»Ø<span lang=EN-US>0</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>604</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de = (struct <u><span
style='color:blue'>dir_entry</span></u> *) bh-&gt;b_data;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>605</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (de[0].inode !=
inode-&gt;i_num || !de[1].inode || </span></p>
<p class=a><u><span lang=EN-US style='color:blue'>606</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>strcmp</span></u>(<i>&quot;.&quot;</i>,de[0].name)
|| <u><span style='color:blue'>strcmp</span></u>(<i>&quot;..&quot;</i>,de[1].name))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>607</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>printk</span></u>(<i>&quot;warning - bad directory
on dev %04x\n&quot;</i>,inode-&gt;i_dev);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>608</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>609</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÎÒÃÇÁî<span lang=EN-US>nr</span>µÈÓÚĿ¼ÏîÐòºÅ£¨´Ó<span
lang=EN-US>0</span>¿ªÊ¼¼Æ£©£»<span lang=EN-US>de</span>Ö¸ÏòµÚÈý¸öĿ¼Ïî¡£²¢Ñ­»·¼ì²â¸ÃĿ¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÖÐÆäÓàËùÓеģ¨<span
lang=EN-US>len - 2</span>£©¸öĿ¼Ï¿´ÓÐûÓÐĿ¼ÏîµÄ<span lang=EN-US>i</span>½ÚµãºÅ×ֶβ»Îª<span
lang=EN-US>0</span>£¨±»Ê¹Óã©¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>610</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nr = 2;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>611</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de += 2;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>612</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (nr&lt;len) {</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹û¸Ã¿é´ÅÅÌ¿éÖеÄĿ¼ÏîÒѾ­È«²¿¼ì²âÍê±Ï£¬ÔòÊͷŸôÅÅÌ¿éµÄ»º³å¿é£¬²¢¶ÁȡĿ¼Êý¾Ý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÎļþÖÐÏÂÒ»¿éº¬ÓÐĿ¼ÏîµÄ´ÅÅ̿顣¶ÁÈ¡µÄ·½·¨ÊǸù¾Ýµ±Ç°¼ì²âµÄĿ¼ÏîÐòºÅ<span
lang=EN-US> nr </span>¼ÆËã³ö¶Ô</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ӦĿ¼ÏîÔÚĿ¼Êý¾ÝÎļþÖеÄÊý¾Ý¿éºÅ£¨<span
lang=EN-US>nr/DIR_ENTRIES_PER_BLOCK</span>£©£¬È»ºóʹÓÃ<span lang=EN-US> bmap()</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>º¯ÊýÈ¡µÃ¶ÔÓ¦µÄÅÌ¿éºÅ<span
lang=EN-US> block</span>£¬ÔÙʹÓöÁÉ豸Å̿麯Êý<span lang=EN-US>bread() </span>°ÑÏàÓ¦ÅÌ¿é¶ÁÈ뻺³å¿éÖУ¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²¢·µ»Ø¸Ã»º³å¿éµÄÖ¸Õë¡£ÈôËù¶ÁÈ¡µÄÏàÓ¦ÅÌ¿éûÓÐʹÓ㨻òÒѾ­²»Óã¬ÈçÎļþÒѾ­É¾³ýµÈ£©£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ôò¼ÌÐø¶ÁÏÂÒ»¿é£¬Èô¶Á²»³ö£¬Ôò³ö´í·µ»Ø<span
lang=EN-US>0</span>¡£·ñÔòÈÃ<span lang=EN-US>de</span>Ö¸Ïò¶Á³ö¿éµÄÊ׸öĿ¼Ïî¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>613</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if ((void *) de &gt;= (void *) (bh-&gt;b_data+<u><span style='color:blue'>BLOCK_SIZE</span></u>))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>614</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>615</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;block=<u><span
style='color:blue'>bmap</span></u>(inode,nr/<u><span style='color:blue'>DIR_ENTRIES_PER_BLOCK</span></u>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>616</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!block) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>617</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
nr += <u><span style='color:blue'>DIR_ENTRIES_PER_BLOCK</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>618</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
continue;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>619</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>620</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!(bh=<u><span style='color:blue'>bread</span></u>(inode-&gt;i_dev,block)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>621</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>622</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de = (struct <u><span style='color:blue'>dir_entry</span></u> *) bh-&gt;b_data;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>623</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶ÔÓÚ<span lang=EN-US>de</span>Ö¸ÏòµÄµ±Ç°Ä¿Â¼ÏÈç¹û¸ÃĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãºÅ×ֶβ»µÈÓÚ<span lang=EN-US>0</span>£¬Ôò±íʾ¸ÃĿ¼ÏîĿǰÕý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>±»Ê¹Óã¬ÔòÊͷŸøßËÙ»º³åÇø£¬·µ»Ø<span
lang=EN-US>0</span>Í˳ö¡£·ñÔò£¬Èô»¹Ã»ÓвéѯÍê¸ÃĿ¼ÖеÄËùÓÐĿ¼Ï</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ôò°ÑĿ¼ÏîÐòºÅ<span
lang=EN-US>nr</span>Ôö<span lang=EN-US>1</span>¡¢<span lang=EN-US>de</span>Ö¸ÏòÏÂÒ»¸öĿ¼Ï¼ÌÐø¼ì²â¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>624</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (de-&gt;inode) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>625</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>626</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>627</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>628</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
de++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>629</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;nr++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>630</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ö´Ðе½ÕâÀï˵Ã÷¸ÃĿ¼ÖÐûÓÐÕÒµ½ÒÑÓõÄĿ¼Ïî<span
lang=EN-US>(</span>µ±È»³ýÁËÍ·Á½¸öÒÔÍâ<span lang=EN-US>)</span>£¬ÔòÊÍ·Å»º³å¿é·µ»Ø<span lang=EN-US>1</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>631</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><a name=L632><u><span lang=EN-US style='color:blue'>632</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;</span></p>
<p class=a><a name=L633><u><span lang=EN-US style='color:blue'>633</span></u></a><span
lang=EN-US> }</span></p>
<p class=a><a name=L634><u><span lang=EN-US style='color:blue'>634</span></u></a><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>ɾ³ýĿ¼¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º <span lang=EN-US>name
- </span>Ŀ¼Ãû£¨Â·¾¶Ãû£©¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º·µ»Ø<span lang=EN-US>0</span>±íʾ³É¹¦£¬·ñÔò·µ»Ø³ö´íºÅ¡£</p>
<p class=a><a name=L635><u><span lang=EN-US style='color:blue'>635</span></u></a><span
lang=EN-US> int <u><span style='color:blue'>sys_rmdir</span></u>(const char *
name)</span></p>
<p class=a><a name=L636><u><span lang=EN-US style='color:blue'>636</span></u></a><span
lang=EN-US> {</span></p>
<p class=a><a name=L637><u><span lang=EN-US style='color:blue'>637</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><a name=L638><u><span lang=EN-US style='color:blue'>638</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int namelen;</span></p>
<p class=a><a name=L639><u><span lang=EN-US style='color:blue'>639</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * dir, * inode;</span></p>
<p class=a><a name=L640><u><span lang=EN-US style='color:blue'>640</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><a name=L641><u><span lang=EN-US style='color:blue'>641</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><a name=L642><u><span lang=EN-US style='color:blue'>642</span></u></a><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×Ïȼì²é²ÎÊýµÄÓÐЧÐÔ²¢È¡Â·¾¶ÃûÖж¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã¡£Èç¹ûÕÒ²»µ½¶ÔӦ·¾¶ÃûÖж¥²ãĿ¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ<span lang=EN-US>i</span>½Úµã£¬Ôò·µ»Ø³ö´íÂë¡£Èç¹û×î¶¥¶ËµÄÎļþÃû³¤¶ÈΪ<span
lang=EN-US>0</span>£¬Ôò˵Ã÷¸ø³öµÄ·¾¶Ãû×îºóûÓÐÖ¸</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶¨ÎļþÃû£¬·Å»Ø¸ÃĿ¼<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íÂëÍ˳ö¡£Èç¹ûÔÚ¸ÃĿ¼ÖÐûÓÐдµÄȨÏÞ£¬Ôò·Å»Ø¸Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼µÄ<span lang=EN-US>i</span>½Úµã£¬·µ»Ø·ÃÎÊÐí¿É³ö´íÂëÍ˳ö¡£Èç¹û²»Êdz¬¼¶Óû§£¬Ôò·µ»Ø·ÃÎÊÐí¿É³ö´íÂë¡£</p>
<p class=a><a name=L643><u><span lang=EN-US style='color:blue'>643</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(dir = <u><span
style='color:blue'>dir_namei</span></u>(name,&amp;namelen,&amp;basename, <u><span
style='color:blue'>NULL</span></u>)))</span></p>
<p class=a><a name=L644><u><span lang=EN-US style='color:blue'>644</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><a name=L645><u><span lang=EN-US style='color:blue'>645</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!namelen) {</span></p>
<p class=a><a name=L646><u><span lang=EN-US style='color:blue'>646</span></u></a><span
lang=EN-US> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><span
style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L647><u><span lang=EN-US style='color:blue'>647</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><a name=L648><u><span lang=EN-US style='color:blue'>648</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><a name=L649><u><span lang=EN-US style='color:blue'>649</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>permission</span></u>(dir,<u><span style='color:blue'>MAY_WRITE</span></u>))
{</span></p>
<p class=a><a name=L650><u><span lang=EN-US style='color:blue'>650</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L651><u><span lang=EN-US style='color:blue'>651</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><a name=L652><u><span lang=EN-US style='color:blue'>652</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºó¸ù¾ÝÖ¸¶¨Ä¿Â¼µÄ<span
lang=EN-US>i</span>½ÚµãºÍĿ¼ÃûÀûÓú¯Êý<span lang=EN-US>find_entry()</span>ѰÕÒ¶ÔӦĿ¼Ï²¢·µ»Ø°üº¬¸Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼ÏîµÄ»º³å¿éÖ¸Õë<span
lang=EN-US>bh</span>¡¢°üº¬¸ÃĿ¼ÏîµÄĿ¼µÄ<span lang=EN-US>i</span>½ÚµãÖ¸Õë<span lang=EN-US>dir</span>ºÍ¸ÃĿ¼ÏîÖ¸Õë<span
lang=EN-US>de</span>¡£ÔÙ¸ù¾Ý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸ÃĿ¼Ïî<span lang=EN-US>de
</span>ÖеÄ<span lang=EN-US>i</span>½ÚµãºÅÀûÓÃ<span lang=EN-US> iget()</span>º¯ÊýµÃµ½¶ÔÓ¦µÄ<span
lang=EN-US>i</span>½Úµã<span lang=EN-US> inode</span>¡£Èç¹û¶ÔӦ·¾¶ÃûÉÏ×î</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ºóĿ¼ÃûµÄĿ¼Ïî²»´æÔÚ£¬ÔòÊͷŰüº¬¸ÃĿ¼ÏîµÄ¸ßËÙ»º³åÇø£¬·Å»ØÄ¿Â¼µÄ
<span lang=EN-US>i</span>½Úµã£¬·µ»ØÎÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼þÒѾ­´æÔÚ³ö´íÂ룬²¢Í˳ö¡£Èç¹ûȡĿ¼ÏîµÄ<span
lang=EN-US>i</span>½Úµã³ö´í£¬Ôò·Å»ØÄ¿Â¼µÄ <span lang=EN-US>i</span>½Úµã£¬²¢Êͷź¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÓÐĿ¼ÏîµÄ¸ßËÙ»º³åÇø£¬·µ»Ø³ö´íºÅ¡£</p>
<p class=a><a name=L653><u><span lang=EN-US style='color:blue'>653</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>find_entry</span></u>(&amp;dir,basename,namelen,&amp;de);</span></p>
<p class=a><a name=L654><u><span lang=EN-US style='color:blue'>654</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bh) {</span></p>
<p class=a><a name=L655><u><span lang=EN-US style='color:blue'>655</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L656><u><span lang=EN-US style='color:blue'>656</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><a name=L657><u><span lang=EN-US style='color:blue'>657</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><a name=L658><u><span lang=EN-US style='color:blue'>658</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(inode = <u><span
style='color:blue'>iget</span></u>(dir-&gt;i_dev, de-&gt;inode))) {</span></p>
<p class=a><a name=L659><u><span lang=EN-US style='color:blue'>659</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L660><u><span lang=EN-US style='color:blue'>660</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><a name=L661><u><span lang=EN-US style='color:blue'>661</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><a name=L662><u><span lang=EN-US style='color:blue'>662</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´ËʱÎÒÃÇÒÑÓаüº¬Òª±»É¾³ýĿ¼ÏîµÄĿ¼<span
lang=EN-US>i</span>½Úµã<span lang=EN-US>dir</span>¡¢Òª±»É¾³ýĿ¼ÏîµÄ<span lang=EN-US>i</span>½Úµã<span
lang=EN-US>inode</span>ºÍÒª</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>±»É¾³ýĿ¼ÏîÖ¸Õë<span
lang=EN-US>de</span>¡£ÏÂÃæÎÒÃÇͨ¹ý¶ÔÕâ<span lang=EN-US>3</span>¸ö¶ÔÏóÖÐÐÅÏ¢µÄ¼ì²éÀ´Ñé֤ɾ³ý²Ù×÷µÄ¿ÉÐÐÐÔ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èô¸ÃĿ¼ÉèÖÃÁËÊÜÏÞɾ³ý±êÖ¾²¢ÇÒ½ø³ÌµÄÓÐЧÓû§<span
lang=EN-US>id</span>£¨<span lang=EN-US>euid</span>£©²»ÊÇ<span lang=EN-US>root</span>£¬²¢ÇÒ½ø³ÌµÄÓÐЧ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Óû§<span lang=EN-US>id</span>£¨<span
lang=EN-US>euid</span>£©²»µÈÓÚ¸Ã<span lang=EN-US>i</span>½ÚµãµÄÓû§<span lang=EN-US>id</span>£¬Ôò±íʾµ±Ç°½ø³ÌûÓÐȨÏÞɾ³ý¸ÃĿ¼£¬ÓÚÊÇ·Å</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»Ø°üº¬ÒªÉ¾³ýĿ¼ÃûµÄĿ¼ <span
lang=EN-US>i</span>½ÚµãºÍ¸ÃҪɾ³ýĿ¼µÄ <span lang=EN-US>i</span>½Úµã£¬È»ºóÊͷŸßËÙ»º³åÇø£¬·µ»Ø</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>³ö´íÂë¡£</p>
<p class=a><a name=L663><u><span lang=EN-US style='color:blue'>663</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((dir-&gt;i_mode
&amp; <u><span style='color:blue'>S_ISVTX</span></u>) &amp;&amp; <u><span
style='color:blue'>current</span></u>-&gt;euid &amp;&amp;</span></p>
<p class=a><a name=L664><u><span lang=EN-US style='color:blue'>664</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_uid != <u><span style='color:blue'>current</span></u>-&gt;euid) {</span></p>
<p class=a><a name=L665><u><span lang=EN-US style='color:blue'>665</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L666><u><span lang=EN-US style='color:blue'>666</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><a name=L667><u><span lang=EN-US style='color:blue'>667</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><a name=L668><u><span lang=EN-US style='color:blue'>668</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><a name=L669><u><span lang=EN-US style='color:blue'>669</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûÒª±»É¾³ýµÄĿ¼Ïî<span
lang=EN-US>i</span>½ÚµãµÄÉ豸ºÅ²»µÈÓÚ°üº¬¸ÃĿ¼ÏîµÄĿ¼µÄÉ豸ºÅ£¬»òÕ߸ñ»É¾³ý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼µÄÒýÓÃÁ¬½Ó¼ÆÊý´óÓÚ<span
lang=EN-US> 1</span>£¨±íʾÓзûºÅÁ¬½ÓµÈ£©£¬Ôò²»ÄÜɾ³ý¸ÃĿ¼¡£ÓÚÊÇÊͷŰüº¬ÒªÉ¾</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>³ýĿ¼ÃûµÄĿ¼<span
lang=EN-US>i</span>½ÚµãºÍ¸ÃҪɾ³ýĿ¼µÄ<span lang=EN-US>i</span>½Úµã£¬ÊͷŸßËÙ»º³å¿é£¬·µ»Ø³ö´íÂë¡£</p>
<p class=a><a name=L670><u><span lang=EN-US style='color:blue'>670</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (inode-&gt;i_dev
!= dir-&gt;i_dev || inode-&gt;i_count&gt;1) {</span></p>
<p class=a><a name=L671><u><span lang=EN-US style='color:blue'>671</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L672><u><span lang=EN-US style='color:blue'>672</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><a name=L673><u><span lang=EN-US style='color:blue'>673</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><a name=L674><u><span lang=EN-US style='color:blue'>674</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><a name=L675><u><span lang=EN-US style='color:blue'>675</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹ûÒª±»É¾³ýĿ¼µÄĿ¼Ïî<span
lang=EN-US>i</span>½Úµã¾ÍµÈÓÚ°üº¬¸ÃÐèɾ³ýĿ¼µÄĿ¼<span lang=EN-US>i</span>½Úµã£¬Ôò±íʾÊÔͼɾ³ý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // &quot;.&quot;</span>Ŀ¼£¬ÕâÊDz»ÔÊÐíµÄ¡£ÓÚÊǷŻذüº¬ÒªÉ¾³ýĿ¼ÃûµÄĿ¼<span
lang=EN-US>i</span>½ÚµãºÍҪɾ³ýĿ¼µÄ<span lang=EN-US>i</span>½Úµã£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÊͷŸßËÙ»º³å¿é£¬·µ»Ø³ö´íÂë¡£</p>
<p class=a><a name=L676><u><span lang=EN-US style='color:blue'>676</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (inode == dir)
{&nbsp;&nbsp;&nbsp;&nbsp; <b><i>/* we may not delete &quot;.&quot;, but
&quot;../dir&quot; is ok */</i></b></span></p>
<p class=a><a name=L677><u><span lang=EN-US style='color:blue'>677</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><a name=L678><u><span lang=EN-US style='color:blue'>678</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L679><u><span lang=EN-US style='color:blue'>679</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><a name=L680><u><span lang=EN-US style='color:blue'>680</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><a name=L681><u><span lang=EN-US style='color:blue'>681</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÈôÒª±»É¾³ýĿ¼<span
lang=EN-US>i</span>½ÚµãµÄÊôÐÔ±íÃ÷Õâ²»ÊÇÒ»¸öĿ¼£¬Ôò±¾É¾³ý²Ù×÷µÄǰÌáÍêÈ«²»´æÔÚ¡£ÓÚÊÇ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·Å»Ø°üº¬É¾³ýĿ¼ÃûµÄĿ¼<span
lang=EN-US>i</span>½ÚµãºÍ¸ÃҪɾ³ýĿ¼µÄ<span lang=EN-US>i</span>½Úµã£¬ÊͷŸßËÙ»º³å¿é£¬·µ»Ø³ö´íÂë¡£</p>
<p class=a><a name=L682><u><span lang=EN-US style='color:blue'>682</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>S_ISDIR</span></u>(inode-&gt;i_mode)) {</span></p>
<p class=a><a name=L683><u><span lang=EN-US style='color:blue'>683</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><a name=L684><u><span lang=EN-US style='color:blue'>684</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L685><u><span lang=EN-US style='color:blue'>685</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><a name=L686><u><span lang=EN-US style='color:blue'>686</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOTDIR</span></u>;</span></p>
<p class=a><a name=L687><u><span lang=EN-US style='color:blue'>687</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èô¸ÃÐ豻ɾ³ýµÄĿ¼²»¿Õ£¬ÔòÒ²²»ÄÜɾ³ý¡£ÓÚÊǷŻذüº¬ÒªÉ¾³ýĿ¼ÃûµÄĿ¼<span
lang=EN-US>i</span>½ÚµãºÍ¸ÃÒª</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ɾ³ýĿ¼µÄ<span lang=EN-US>i</span>½Úµã£¬ÊͷŸßËÙ»º³å¿é£¬·µ»Ø³ö´íÂë¡£</p>
<p class=a><a name=L688><u><span lang=EN-US style='color:blue'>688</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>empty_dir</span></u>(inode)) {</span></p>
<p class=a><a name=L689><u><span lang=EN-US style='color:blue'>689</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><a name=L690><u><span lang=EN-US style='color:blue'>690</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L691><u><span lang=EN-US style='color:blue'>691</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><a name=L692><u><span lang=EN-US style='color:blue'>692</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOTEMPTY</span></u>;</span></p>
<p class=a><a name=L693><u><span lang=EN-US style='color:blue'>693</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶ÔÓÚÒ»¸ö¿ÕĿ¼£¬ÆäĿ¼ÏîÁ´½ÓÊýÓ¦¸ÃΪ<span
lang=EN-US>2</span>£¨Á´½Óµ½ÉϲãĿ¼ºÍ±¾Ä¿Â¼£©¡£Èô¸ÃÐ豻ɾ³ýÄ¿</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼µÄ<span lang=EN-US>i</span>½ÚµãµÄÁ¬½ÓÊý²»µÈÓÚ<span
lang=EN-US>2</span>£¬ÔòÏÔʾ¾¯¸æÐÅÏ¢¡£µ«É¾³ý²Ù×÷ÈÔÈ»¼ÌÐøÖ´ÐС£ÓÚÊÇÖøÃÐè±»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ɾ³ýĿ¼µÄĿ¼ÏîµÄ<span
lang=EN-US>i</span>½ÚµãºÅ×Ö¶ÎΪ<span lang=EN-US>0</span>£¬±íʾ¸ÃĿ¼Ïî²»ÔÙʹÓ㬲¢Öú¬ÓиÃĿ¼ÏîµÄ¸ßËÙ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»º³å¿éÒÑÐ޸ıêÖ¾£¬²¢ÊͷŸûº³å¿é¡£È»ºóÔÙÖñ»É¾³ýĿ¼<span
lang=EN-US>i</span>½ÚµãµÄÁ´½ÓÊýΪ<span lang=EN-US>0</span>£¨±íʾ¿ÕÏУ©£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²¢ÖÃ<span lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾¡£</p>
<p class=a><a name=L694><u><span lang=EN-US style='color:blue'>694</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(inode-&gt;i_nlinks != 2)</span></p>
<p class=a><a name=L695><u><span lang=EN-US style='color:blue'>695</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>printk</span></u>(<i>&quot;empty directory has
nlink!=2 (%d)&quot;</i>,inode-&gt;i_nlinks);</span></p>
<p class=a><a name=L696><u><span lang=EN-US style='color:blue'>696</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de-&gt;inode = 0;</span></p>
<p class=a><a name=L697><u><span lang=EN-US style='color:blue'>697</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh-&gt;b_dirt = 1;</span></p>
<p class=a><a name=L698><u><span lang=EN-US style='color:blue'>698</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><a name=L699><u><span lang=EN-US style='color:blue'>699</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks=0;</span></p>
<p class=a><a name=L700><u><span lang=EN-US style='color:blue'>700</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt=1;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔÙ½«°üº¬±»É¾³ýĿ¼ÃûµÄĿ¼µÄ<span
lang=EN-US>i</span>½ÚµãÁ´½Ó¼ÆÊý¼õ<span lang=EN-US>1</span>£¬ÐÞ¸ÄÆä¸Ä±äʱ¼äºÍÐÞ¸Äʱ¼äΪµ±Ç°Ê±</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼ä£¬²¢ÖøýڵãÒÑÐ޸ıêÖ¾¡£×îºó·Å»Ø°üº¬ÒªÉ¾³ýĿ¼ÃûµÄĿ¼<span
lang=EN-US>i</span>½ÚµãºÍ¸ÃҪɾ³ýĿ¼µÄ<span lang=EN-US>i</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½Úµã£¬·µ»Ø<span lang=EN-US>0</span>£¨É¾³ý²Ù×÷³É¹¦£©¡£</p>
<p class=a><a name=L701><u><span lang=EN-US style='color:blue'>701</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir-&gt;i_nlinks--;</span></p>
<p class=a><a name=L702><u><span lang=EN-US style='color:blue'>702</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir-&gt;i_ctime =
dir-&gt;i_mtime = <u><span style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><a name=L703><u><span lang=EN-US style='color:blue'>703</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir-&gt;i_dirt=1;</span></p>
<p class=a><a name=L704><u><span lang=EN-US style='color:blue'>704</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><a name=L705><u><span lang=EN-US style='color:blue'>705</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><a name=L706><u><span lang=EN-US style='color:blue'>706</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;</span></p>
<p class=a><a name=L707><u><span lang=EN-US style='color:blue'>707</span></u></a><span
lang=EN-US> }</span></p>
<p class=a><a name=L708><u><span lang=EN-US style='color:blue'>708</span></u></a><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>ɾ³ý£¨ÊÍ·Å£©ÎļþÃû¶ÔÓ¦µÄĿ¼Ïî¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´ÓÎļþϵͳɾ³ýÒ»¸öÃû×Ö¡£Èç¹ûÊÇÎļþµÄ×îºóÒ»¸öÁ´½Ó£¬²¢ÇÒûÓнø³ÌÕý´ò¿ª¸ÃÎļþ£¬Ôò¸Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÎļþÒ²½«±»É¾³ý£¬²¢ÊÍ·ÅËùÕ¼ÓõÄÉ豸¿Õ¼ä¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>name
- </span>ÎļþÃû£¨Â·¾¶Ãû£©¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£º³É¹¦Ôò·µ»Ø<span
lang=EN-US>0</span>£¬·ñÔò·µ»Ø³ö´íºÅ¡£</p>
<p class=a><a name=L709><u><span lang=EN-US style='color:blue'>709</span></u></a><span
lang=EN-US> int <u><span style='color:blue'>sys_unlink</span></u>(const char *
name)</span></p>
<p class=a><a name=L710><u><span lang=EN-US style='color:blue'>710</span></u></a><span
lang=EN-US> {</span></p>
<p class=a><a name=L711><u><span lang=EN-US style='color:blue'>711</span></u></a><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>712</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int namelen;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>713</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * dir, * inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>714</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>715</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>716</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×Ïȼì²é²ÎÊýµÄÓÐЧÐÔ²¢È¡Â·¾¶ÃûÖж¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã¡£Èç¹ûÕÒ²»µ½¶ÔӦ·¾¶ÃûÖж¥²ãĿ¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ <span lang=EN-US>i</span>½Úµã£¬Ôò·µ»Ø³ö´íÂë¡£Èç¹û×î¶¥¶ËµÄÎļþÃû³¤¶ÈΪ<span
lang=EN-US>0</span>£¬Ôò˵Ã÷¸ø³öµÄ·¾¶Ãû×îºóûÓÐÖ¸</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶¨ÎļþÃû£¬·Å»Ø¸ÃĿ¼<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íÂëÍ˳ö¡£Èç¹ûÔÚ¸ÃĿ¼ÖÐûÓÐдµÄȨÏÞ£¬Ôò·Å»Ø¸Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼µÄ<span lang=EN-US>i</span>½Úµã£¬·µ»Ø·ÃÎÊÐí¿É³ö´íÂëÍ˳ö¡£Èç¹ûÕÒ²»µ½¶ÔӦ·¾¶Ãû¶¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬Ôò·µ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»Ø³ö´íÂë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>717</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(dir = <u><span
style='color:blue'>dir_namei</span></u>(name,&amp;namelen,&amp;basename, <u><span
style='color:blue'>NULL</span></u>)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>718</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>719</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!namelen) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>720</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>721</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>722</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>723</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>permission</span></u>(dir,<u><span style='color:blue'>MAY_WRITE</span></u>))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>724</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>725</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>726</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºó¸ù¾ÝÖ¸¶¨Ä¿Â¼µÄ<span
lang=EN-US>i</span>½ÚµãºÍĿ¼ÃûÀûÓú¯Êý<span lang=EN-US>find_entry()</span>ѰÕÒ¶ÔӦĿ¼Ï²¢·µ»Ø°üº¬¸Ã</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼ÏîµÄ»º³å¿éÖ¸Õë<span
lang=EN-US>bh</span>¡¢°üº¬¸ÃĿ¼ÏîµÄĿ¼µÄ<span lang=EN-US>i</span>½ÚµãÖ¸Õë<span lang=EN-US>dir</span>ºÍ¸ÃĿ¼ÏîÖ¸Õë<span
lang=EN-US>de</span>¡£ÔÙ¸ù¾Ý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¸ÃĿ¼Ïî<span lang=EN-US>de
</span>ÖеÄ<span lang=EN-US>i</span>½ÚµãºÅÀûÓÃ<span lang=EN-US> iget()</span>º¯ÊýµÃµ½¶ÔÓ¦µÄ<span
lang=EN-US>i</span>½Úµã<span lang=EN-US> inode</span>¡£Èç¹û¶ÔӦ·¾¶ÃûÉÏ×î</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ºóĿ¼ÃûµÄĿ¼Ïî²»´æÔÚ£¬ÔòÊͷŰüº¬¸ÃĿ¼ÏîµÄ¸ßËÙ»º³åÇø£¬·Å»ØÄ¿Â¼µÄ
<span lang=EN-US>i</span>½Úµã£¬·µ»ØÎÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼þÒѾ­´æÔÚ³ö´íÂ룬²¢Í˳ö¡£Èç¹ûȡĿ¼ÏîµÄ<span
lang=EN-US>i</span>½Úµã³ö´í£¬Ôò·Å»ØÄ¿Â¼µÄ <span lang=EN-US>i</span>½Úµã£¬²¢Êͷź¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÓÐĿ¼ÏîµÄ¸ßËÙ»º³åÇø£¬·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>727</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>find_entry</span></u>(&amp;dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>728</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>729</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>730</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>731</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>732</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(inode = <u><span
style='color:blue'>iget</span></u>(dir-&gt;i_dev, de-&gt;inode))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>733</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>734</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>735</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>736</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>´ËʱÎÒÃÇÒÑÓаüº¬Òª±»É¾³ýĿ¼ÏîµÄĿ¼<span
lang=EN-US>i</span>½Úµã<span lang=EN-US>dir</span>¡¢Òª±»É¾³ýĿ¼ÏîµÄ<span lang=EN-US>i</span>½Úµã<span
lang=EN-US>inode</span>ºÍÒª</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>±»É¾³ýĿ¼ÏîÖ¸Õë<span
lang=EN-US>de</span>¡£ÏÂÃæÎÒÃÇͨ¹ý¶ÔÕâ<span lang=EN-US>3</span>¸ö¶ÔÏóÖÐÐÅÏ¢µÄ¼ì²éÀ´Ñé֤ɾ³ý²Ù×÷µÄ¿ÉÐÐÐÔ¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èô¸ÃĿ¼ÉèÖÃÁËÊÜÏÞɾ³ý±êÖ¾²¢ÇÒ½ø³ÌµÄÓÐЧÓû§<span
lang=EN-US>id</span>£¨<span lang=EN-US>euid</span>£©²»ÊÇ<span lang=EN-US>root</span>£¬²¢ÇÒ½ø³ÌµÄ<span
lang=EN-US>euid</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²»µÈÓÚ¸Ã<span lang=EN-US>i</span>½ÚµãµÄÓû§<span
lang=EN-US>id</span>£¬²¢ÇÒ½ø³ÌµÄ<span lang=EN-US>euid</span>Ò²²»µÈÓÚĿ¼<span lang=EN-US>i</span>½ÚµãµÄÓû§<span
lang=EN-US>id</span>£¬Ôò±íʾµ±Ç°½ø</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>³ÌûÓÐȨÏÞɾ³ý¸ÃĿ¼£¬ÓÚÊǷŻذüº¬ÒªÉ¾³ýĿ¼ÃûµÄĿ¼<span
lang=EN-US>i</span>½ÚµãºÍ¸ÃҪɾ³ýĿ¼µÄ<span lang=EN-US>i</span>½Úµã£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÊͷŸßËÙ»º³å¿é£¬·µ»Ø³ö´íÂë¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>737</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((dir-&gt;i_mode
&amp; <u><span style='color:blue'>S_ISVTX</span></u>) &amp;&amp; !<u><span
style='color:blue'>suser</span></u>() &amp;&amp;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>738</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>current</span></u>-&gt;euid != inode-&gt;i_uid
&amp;&amp;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>739</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>current</span></u>-&gt;euid != dir-&gt;i_uid) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>740</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>741</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>742</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>743</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>744</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹û¸ÃÖ¸¶¨ÎļþÃûÊÇÒ»¸öĿ¼£¬ÔòÒ²²»ÄÜɾ³ý¡£·Å»Ø¸ÃĿ¼<span
lang=EN-US>i</span>½ÚµãºÍ¸ÃÎļþÃûĿ¼ÏîµÄ<span lang=EN-US>i</span>½Ú</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µã£¬ÊͷŰüº¬¸ÃĿ¼ÏîµÄ»º³å¿é£¬·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>745</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (<u><span
style='color:blue'>S_ISDIR</span></u>(inode-&gt;i_mode)) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>746</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>747</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>748</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>749</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>750</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Èç¹û¸Ã<span lang=EN-US>i</span>½ÚµãµÄÁ´½Ó¼ÆÊýÖµÒѾ­Îª<span
lang=EN-US>0</span>£¬ÔòÏÔʾ¾¯¸æÐÅÏ¢£¬²¢ÐÞÕýÆäΪ<span lang=EN-US>1</span>¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>751</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(!inode-&gt;i_nlinks) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>752</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<u><span
style='color:blue'>printk</span></u>(<i>&quot;Deleting nonexistent file
(%04x:%d), %d\n&quot;</i>,</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>753</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_dev,inode-&gt;i_num,inode-&gt;i_nlinks);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>754</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks=1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>755</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÎÒÃÇ¿ÉÒÔɾ³ýÎļþÃû¶ÔÓ¦µÄĿ¼ÏîÁË¡£ÓÚÊǽ«¸ÃÎļþÃûĿ¼ÏîÖеÄ<span
lang=EN-US>i</span>½ÚµãºÅ×Ö¶ÎÖÃΪ<span lang=EN-US>0</span>£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>±íʾÊͷŸÃĿ¼Ï²¢ÉèÖðüº¬¸ÃĿ¼ÏîµÄ»º³å¿éÒÑÐ޸ıêÖ¾£¬ÊͷŸøßËÙ»º³å¿é¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>756</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de-&gt;inode = 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>757</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>758</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºó°ÑÎļþÃû¶ÔÓ¦<span
lang=EN-US>i</span>½ÚµãµÄÁ´½ÓÊý¼õ<span lang=EN-US>1</span>£¬ÖÃÒÑÐ޸ıêÖ¾£¬¸üиıäʱ¼äΪµ±Ç°Ê±¼ä¡£×îºó·Å</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»Ø¸Ã<span lang=EN-US>i</span>½ÚµãºÍĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø<span lang=EN-US>0</span>£¨³É¹¦£©¡£Èç¹ûÊÇÎļþµÄ×îºóÒ»¸öÁ´½Ó£¬¼´<span
lang=EN-US>i</span>½ÚµãÁ´½Ó</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Êý¼õ<span lang=EN-US>1</span>ºóµÈÓÚ<span
lang=EN-US>0</span>£¬²¢ÇÒ´ËʱûÓнø³ÌÕý´ò¿ª¸ÃÎļþ£¬ÄÇôÔÚµ÷ÓÃ<span lang=EN-US>iput()</span>·Å»Ø<span
lang=EN-US>i</span>½Úµãʱ£¬¸ÃÎÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼þÒ²½«±»É¾³ý£¬²¢ÊÍ·ÅËùÕ¼ÓõÄÉ豸¿Õ¼ä¡£²Î¼û<span
lang=EN-US>fs/inode.c</span>£¬µÚ<span lang=EN-US>183</span>ÐС£</p>
<p class=a><u><span lang=EN-US style='color:blue'>759</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks--;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>760</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt =
1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>761</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_ctime =
<u><span style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>762</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>763</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>764</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>765</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>766</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>½¨Á¢·ûºÅÁ´½Ó¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ϊһ¸öÒÑ´æÔÚÎļþ´´½¨Ò»¸ö·ûºÅÁ´½Ó£¨Ò²³ÆÎªÈíÁ¬½Ó<span
lang=EN-US> - hard link</span>£©¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>oldname
- </span>ԭ·¾¶Ãû£»<span lang=EN-US>newname - </span>еķ¾¶Ãû¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£ºÈô³É¹¦Ôò·µ»Ø<span
lang=EN-US>0</span>£¬·ñÔò·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>767</span></u><span
lang=EN-US> int <u><span style='color:blue'>sys_symlink</span></u>(const char *
oldname, const char * newname)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>768</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>769</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>770</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * dir, * inode;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>771</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh, * name_block;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>772</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>773</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int namelen, i;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>774</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char c;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>775</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏȲéÕÒз¾¶ÃûµÄ×î¶¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã<span lang=EN-US>dir</span>£¬²¢·µ»Ø×îºóµÄÎļþÃû¼°Æä³¤¶È¡£Èç¹ûĿ¼µÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // i</span>½ÚµãûÓÐÕÒµ½£¬Ôò·µ»Ø³ö´íºÅ¡£Èç¹ûз¾¶ÃûÖв»°üÀ¨ÎļþÃû£¬Ôò·Å»ØÐ·¾¶ÃûĿ¼µÄ<span
lang=EN-US>i</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½Úµã£¬·µ»Ø³ö´íºÅ¡£ÁíÍ⣬Èç¹ûÓû§Ã»ÓÐÔÚÐÂĿ¼ÖÐдµÄȨÏÞ£¬ÔòÒ²²»Äܽ¨Á¢Á¬½Ó£¬ÓÚÊÇ·Å</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>»ØÐ·¾¶ÃûĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>776</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir = <u><span
style='color:blue'>dir_namei</span></u>(newname,&amp;namelen,&amp;basename, <u><span
style='color:blue'>NULL</span></u>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>777</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!dir)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>778</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EACCES</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>779</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!namelen) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>780</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>781</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>782</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>783</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>permission</span></u>(dir,<u><span style='color:blue'>MAY_WRITE</span></u>))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>784</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>785</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EACCES</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>786</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÎÒÃÇÔÚĿ¼ָ¶¨É豸ÉÏÉêÇëÒ»¸öеÄ<span
lang=EN-US>i</span>½Úµã£¬²¢ÉèÖøÃ<span lang=EN-US>i</span>½ÚµãģʽΪ·ûºÅÁ´½ÓÀàÐÍÒÔ¼°</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½ø³Ì¹æ¶¨µÄģʽÆÁ±ÎÂë¡£²¢ÇÒÉèÖøÃ<span
lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>787</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(inode = <u><span
style='color:blue'>new_inode</span></u>(dir-&gt;i_dev))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>788</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>789</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>790</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>791</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_mode = <u><span
style='color:blue'>S_IFLNK</span></u> | (0777 &amp; ~current-&gt;<u><span
style='color:blue'>umask</span></u>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>792</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt =
1;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ΪÁ˱£´æ·ûºÅÁ´½Ó·¾¶Ãû×Ö·û´®ÐÅÏ¢£¬ÎÒÃÇÐèҪΪ¸Ã<span
lang=EN-US>i</span>½ÚµãÉêÇëÒ»¸ö´ÅÅ̿飬²¢ÈÃ<span lang=EN-US>i</span>½ÚµãµÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÚ<span lang=EN-US>1</span>¸öÖ±½Ó¿éºÅ<span
lang=EN-US>i_zone[0]</span>µÈÓڵõ½µÄÂß¼­¿éºÅ¡£È»ºóÖÃ<span lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾¡£Èç¹ûÉêÇëʧ°Ü</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ôò·Å»Ø¶ÔӦĿ¼µÄ<span
lang=EN-US>i</span>½Úµã£»¸´Î»ÐÂÉêÇëµÄ<span lang=EN-US>i</span>½ÚµãÁ´½Ó¼ÆÊý£»·Å»Ø¸ÃеÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»ØÃ»ÓпÕ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼ä³ö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>793</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
(!(inode-&gt;i_zone[0]=<u><span style='color:blue'>new_block</span></u>(inode-&gt;i_dev)))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>794</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>795</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks--;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>796</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>797</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>798</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>799</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt =
1;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºó´ÓÉ豸É϶ÁÈ¡ÐÂÉêÇëµÄ´ÅÅ̿飨ĿµÄÊǰѶÔÓ¦¿é·Åµ½¸ßËÙ»º³åÇøÖУ©¡£Èô³ö´í£¬Ôò·Å»Ø</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¶ÔӦĿ¼µÄ<span lang=EN-US>i</span>½Úµã£»¸´Î»ÐÂÉêÇëµÄ<span
lang=EN-US>i</span>½ÚµãÁ´½Ó¼ÆÊý£»·Å»Ø¸ÃеÄ<span lang=EN-US>i</span>½Úµã£¬·µ»ØÃ»Óпռä³ö´í</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>800</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(name_block=<u><span
style='color:blue'>bread</span></u>(inode-&gt;i_dev,inode-&gt;i_zone[0]))) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>801</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>802</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks--;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>803</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>804</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ERROR</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>805</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÎÒÃÇ¿ÉÒÔ°Ñ·ûºÅÁ´½ÓÃû×Ö·û´®·ÅÈëÕâ¸öÅÌ¿éÖÐÁË¡£Å̿鳤¶ÈΪ<span
lang=EN-US>1024</span>×Ö½Ú£¬Òò´ËĬÈÏ·ûºÅ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Á´½ÓÃû³¤¶È×î´óÒ²Ö»ÄÜÊÇ<span
lang=EN-US>1024</span>×Ö½Ú¡£ÎÒÃǰÑÓû§¿Õ¼äÖеķûºÅÁ´½ÓÃû×Ö·û´®¸´ÖƵ½ÅÌ¿éËùÔÚ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ»º³å¿éÖУ¬²¢Öûº³å¿éÒÑÐ޸ıêÖ¾¡£Îª·ÀÖ¹Óû§ÌṩµÄ×Ö·û´®Ã»ÓÐÒÔ<span
lang=EN-US>null</span>½á⣬ÎÒÃÇÔÚ»º</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>³å¿éÊý¾ÝÇø×îºóÒ»¸ö×Ö½Ú´¦·ÅÉÏÒ»¸ö<span
lang=EN-US>NULL</span>¡£È»ºóÊͷŸûº³å¿é£¬²¢ÉèÖÃ<span lang=EN-US>i</span>½Úµã¶ÔÓ¦ÎļþÖÐÊý</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¾Ý³¤¶ÈµÈÓÚ·ûºÅÁ´½ÓÃû×Ö·û´®³¤¶È£¬²¢ÖÃ<span
lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>806</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>807</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (i &lt; 1023
&amp;&amp; (c=<u><span style='color:blue'>get_fs_byte</span></u>(oldname++)))</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>808</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
name_block-&gt;b_data[i++] = c;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>809</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
name_block-&gt;b_data[i] = 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>810</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
name_block-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>811</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(name_block);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>812</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_size =
i;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>813</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode-&gt;i_dirt =
1;</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºóÎÒÃÇËÑË÷һϷ¾¶ÃûÖ¸¶¨µÄ·ûºÅÁ´½ÓÎļþÃûÊÇ·ñÒѾ­´æÔÚ¡£ÈôÒѾ­´æÔÚÔò²»ÄÜ´´½¨Í¬Ãû</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ŀ¼Ïî<span lang=EN-US>i</span>½Úµã¡£Èç¹û¶ÔÓ¦·ûºÅÁ´½ÓÎļþÃûÒѾ­´æÔÚ£¬ÔòÊͷŰüº¬¸ÃĿ¼ÏîµÄ»º³åÇø¿é£¬¸´Î»</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÐÂÉêÇëµÄ<span lang=EN-US>i</span>½ÚµãÁ¬½Ó¼ÆÊý£¬²¢·Å»ØÄ¿Â¼µÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»ØÎļþÒѾ­´æÔڵijö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>814</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>find_entry</span></u>(&amp;dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>815</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>816</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks--;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>817</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>818</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>819</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>820</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EEXIST</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>821</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚÎÒÃÇÔÚÖ¸¶¨Ä¿Â¼ÖÐÐÂÌí¼ÓÒ»¸öĿ¼ÏÓÃÓÚ´æ·Åн¨·ûºÅÁ´½ÓÎļþÃûµÄ<span
lang=EN-US>i</span>½ÚµãºÅºÍĿ¼</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ãû¡£Èç¹ûʧ°Ü£¨°üº¬¸ÃĿ¼ÏîµÄ¸ßËÙ»º³åÇøÖ¸ÕëΪ<span
lang=EN-US>NULL</span>£©£¬Ôò·Å»ØÄ¿Â¼µÄ<span lang=EN-US>i</span>½Úµã£»ËùÉêÇëµÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // i</span>½ÚµãÒýÓÃÁ¬½Ó¼ÆÊý¸´Î»£¬²¢·Å»Ø¸Ã<span
lang=EN-US>i</span>½Úµã¡£·µ»Ø³ö´íÂëÍ˳ö¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>822</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>add_entry</span></u>(dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>823</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>824</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
inode-&gt;i_nlinks--;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>825</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>826</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>827</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>828</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>×îºóÁî¸ÃÐÂĿ¼ÏîµÄ<span
lang=EN-US>i</span>½Úµã×ֶεÈÓÚÐÂ<span lang=EN-US>i</span>½ÚµãºÅ£¬²¢ÖøßËÙ»º³å¿éÒÑÐ޸ıêÖ¾£¬ÊͷŸßËÙ»º</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>³å¿é£¬·Å»ØÄ¿Â¼ºÍеÄ<span
lang=EN-US>i</span>½Úµã£¬×îºó·µ»Ø<span lang=EN-US>0</span>£¨³É¹¦£©¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>829</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de-&gt;inode =
inode-&gt;i_num;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>830</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>831</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>832</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>833</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(inode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>834</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>835</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>836</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; //// </span>ΪÎļþ½¨Á¢Ò»¸öÎļþÃûĿ¼Ïî¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ϊһ¸öÒÑ´æÔÚµÄÎļþ´´½¨Ò»¸öÐÂÁ´½Ó£¨Ò²³ÆÎªÓ²Á¬½Ó<span
lang=EN-US> - hard link</span>£©¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²ÎÊý£º<span lang=EN-US>oldname
- </span>ԭ·¾¶Ãû£»<span lang=EN-US>newname - </span>еķ¾¶Ãû¡£</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·µ»Ø£ºÈô³É¹¦Ôò·µ»Ø<span
lang=EN-US>0</span>£¬·ñÔò·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>837</span></u><span
lang=EN-US> int <u><span style='color:blue'>sys_link</span></u>(const char *
oldname, const char * newname)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>838</span></u><span
lang=EN-US> {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>839</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>dir_entry</span></u> * de;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>840</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>m_inode</span></u> * oldinode, * dir;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>841</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct <u><span
style='color:blue'>buffer_head</span></u> * bh;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>842</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *
basename;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>843</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int namelen;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>844</span></u><span
lang=EN-US> </span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ê×ÏȶÔÔ­ÎļþÃû½øÐÐÓÐЧÐÔÑéÖ¤£¬ËüÓ¦¸Ã´æÔÚ²¢ÇÒ²»ÊÇÒ»¸öĿ¼Ãû¡£ËùÒÔÎÒÃÇÏÈȡԭÎļþ·</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¾¶Ãû¶ÔÓ¦µÄ<span lang=EN-US>i</span>½Úµã<span
lang=EN-US>oldinode</span>¡£Èç¹ûΪ<span lang=EN-US>0</span>£¬Ôò±íʾ³ö´í£¬·µ»Ø³ö´íºÅ¡£Èç¹ûԭ·¾¶Ãû¶ÔÓ¦µÄÊÇ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ò»¸öĿ¼Ãû£¬Ôò·Å»Ø¸Ã<span
lang=EN-US>i</span>½Úµã£¬Ò²·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>845</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oldinode=<u><span
style='color:blue'>namei</span></u>(oldname);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>846</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!oldinode)</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>847</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOENT</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>848</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (<u><span
style='color:blue'>S_ISDIR</span></u>(oldinode-&gt;i_mode)) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>849</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(oldinode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>850</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>851</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>È»ºó²éÕÒз¾¶ÃûµÄ×î¶¥²ãĿ¼µÄ<span
lang=EN-US>i</span>½Úµã<span lang=EN-US>dir</span>£¬²¢·µ»Ø×îºóµÄÎļþÃû¼°Æä³¤¶È¡£Èç¹ûĿ¼µÄ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // i</span>½ÚµãûÓÐÕÒµ½£¬Ôò·Å»ØÔ­Â·¾¶ÃûµÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅ¡£Èç¹ûз¾¶ÃûÖв»°üÀ¨ÎļþÃû£¬</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>Ôò·Å»ØÔ­Â·¾¶Ãû<span
lang=EN-US>i</span>½ÚµãºÍз¾¶ÃûĿ¼µÄ<span lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>852</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir = <u><span
style='color:blue'>dir_namei</span></u>(newname,&amp;namelen,&amp;basename, <u><span
style='color:blue'>NULL</span></u>);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>853</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!dir) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>854</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(oldinode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>855</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EACCES</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>856</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>857</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!namelen) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>858</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(oldinode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>859</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>860</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EPERM</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>861</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÎÒÃDz»ÄÜ¿çÉ豸½¨Á¢Ó²Á´½Ó¡£Òò´ËÈç¹ûз¾¶Ãû¶¥²ãĿ¼µÄÉ豸ºÅÓëԭ·¾¶ÃûµÄÉ豸ºÅ</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>²»Ò»Ñù£¬Ôò·Å»ØÐ·¾¶ÃûĿ¼µÄ<span
lang=EN-US>i</span>½ÚµãºÍԭ·¾¶ÃûµÄ<span lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅ¡£ÁíÍ⣬Èç¹ûÓû§</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ûÓÐÔÚÐÂĿ¼ÖÐдµÄȨÏÞ£¬ÔòÒ²²»Äܽ¨Á¢Á¬½Ó£¬ÓÚÊÇ·Å»ØÐ·¾¶ÃûĿ¼µÄ<span
lang=EN-US>i</span>½ÚµãºÍԭ·¾¶Ãû</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µÄ<span lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>862</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dir-&gt;i_dev
!= oldinode-&gt;i_dev) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>863</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>864</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(oldinode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>865</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EXDEV</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>866</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>867</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!<u><span
style='color:blue'>permission</span></u>(dir,<u><span style='color:blue'>MAY_WRITE</span></u>))
{</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>868</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>869</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(oldinode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>870</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EACCES</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>871</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚ²éѯ¸Ãз¾¶ÃûÊÇ·ñÒѾ­´æÔÚ£¬Èç¹û´æÔÚÔòÒ²²»Äܽ¨Á¢Á´½Ó¡£ÓÚÊÇÊͷŰüº¬¸ÃÒÑ´æÔÚÄ¿</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>¼ÏîµÄ¸ßËÙ»º³å¿é£¬·Å»ØÐ·¾¶ÃûĿ¼µÄ<span
lang=EN-US>i</span>½ÚµãºÍԭ·¾¶ÃûµÄ<span lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅ¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>872</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>find_entry</span></u>(&amp;dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>873</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>874</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>875</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>876</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(oldinode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>877</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>EEXIST</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>878</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÏÖÔÚËùÓÐÌõ¼þ¶¼Âú×ãÁË£¬ÓÚÊÇÎÒÃÇÔÚÐÂĿ¼ÖÐÌí¼ÓÒ»¸öĿ¼Ïî¡£Èôʧ°ÜÔò·Å»Ø¸ÃĿ¼µÄ<span
lang=EN-US>i</span>½Ú</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>µãºÍԭ·¾¶ÃûµÄ<span
lang=EN-US>i</span>½Úµã£¬·µ»Ø³ö´íºÅ¡£·ñÔò³õʼÉèÖøÃĿ¼ÏîµÄ<span lang=EN-US>i</span>½ÚµãºÅµÈÓÚԭ·¾¶ÃûµÄ<span
lang=EN-US>i</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>½ÚµãºÅ£¬²¢Öðüº¬¸ÃÐÂÌíĿ¼ÏîµÄ»º³å¿éÒÑÐ޸ıêÖ¾£¬ÊͷŸûº³å¿é£¬·Å»ØÄ¿Â¼µÄ<span
lang=EN-US>i</span>½Úµã¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>879</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh = <u><span
style='color:blue'>add_entry</span></u>(dir,basename,namelen,&amp;de);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>880</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bh) {</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>881</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>882</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<u><span style='color:blue'>iput</span></u>(oldinode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>883</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return -<u><span style='color:blue'>ENOSPC</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>884</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>885</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de-&gt;inode =
oldinode-&gt;i_num;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>886</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bh-&gt;b_dirt = 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>887</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>brelse</span></u>(bh);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>888</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(dir);</span></p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>ÔÙ½«Ô­½ÚµãµÄÁ´½Ó¼ÆÊý¼Ó<span
lang=EN-US>1</span>£¬ÐÞ¸ÄÆä¸Ä±äʱ¼äΪµ±Ç°Ê±¼ä£¬²¢ÉèÖÃ<span lang=EN-US>i</span>½ÚµãÒÑÐ޸ıêÖ¾¡£×îºó</p>
<p class=a><span lang=EN-US>&nbsp;&nbsp;&nbsp; // </span>·Å»ØÔ­Â·¾¶ÃûµÄ<span
lang=EN-US>i</span>½Úµã£¬²¢·µ»Ø<span lang=EN-US>0</span>£¨³É¹¦£©¡£</p>
<p class=a><u><span lang=EN-US style='color:blue'>889</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
oldinode-&gt;i_nlinks++;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>890</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
oldinode-&gt;i_ctime = <u><span style='color:blue'>CURRENT_TIME</span></u>;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>891</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oldinode-&gt;i_dirt
= 1;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>892</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span
style='color:blue'>iput</span></u>(oldinode);</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>893</span></u><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>894</span></u><span
lang=EN-US> }</span></p>
<p class=a><u><span lang=EN-US style='color:blue'>895</span></u><span
lang=EN-US> </span></p>
<div class=a align=center style='text-align:center'><span lang=EN-US>
<hr size=4 width="100%" align=center>
</span></div>
<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>
<p class=MsoNormal><span lang=EN-US>&nbsp;</span></p>
</div>
</body>
</html>