?? page218.html
字號:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第8章 文件句柄功能與磁盤</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!導航條>
<p><a href="content1.html">目錄</a> <a href="page217.html">上一頁</a> <a href="page219.html">下一頁</a> <a href="page238.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!標尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=1%></td><td width=6%></td><td width=3%></td>
</tr>
<!頁眉行>
<tr height=60 valign="bottom">
<td></td><td>-218-</td><td></td> <!頁碼>
<td colspan=6>PC機匯編語言實戰精解</td><td colspan=4></td><td colspan=6 align="right"><img src="icons/flag.gif"></td> <!書名>
<td></td><td></td><td></td> <!右側空白>
</tr>
<!頁眉線>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!正文>
<font face="宋體" lang="ZH-CN" size=3>
<tr height=20><td colspan=22></td></tr> <!頂部空白>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
句柄2所表示的設備中讀入信息?能否使用40H功能向句柄3所表示的設備輸出信息?我們能否用3EH功能關閉某個句柄所表示的設備?分析這樣的問題也非難事,編個程序試一試即可。
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2></td><td colspan=2 align=center>句 柄</td><td colspan=4 align=center>設備名稱</td><td colspan=4 align=center>邏輯設備名</td><td colspan=4 align=center>缺省設備</td><td colspan=2></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2></td><td colspan=2 align=center>00</td><td colspan=4 align=center>標準輸入設備</td><td colspan=4 align=center>CON</td><td colspan=4 align=center>鍵盤</td><td colspan=2></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2></td><td colspan=2 align=center>01</td><td colspan=4 align=center>標準輸出設備</td><td colspan=4 align=center>CON</td><td colspan=4 align=center>顯示器</td><td colspan=2></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2></td><td colspan=2 align=center>02</td><td colspan=4 align=center>標準錯誤設備</td><td colspan=4 align=center>CON</td><td colspan=4 align=center>顯示器</td><td colspan=2></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2></td><td colspan=2 align=center>03</td><td colspan=4 align=center>標準輔助設備</td><td colspan=4 align=center>AUX</td><td colspan=4 align=center>串行口</td><td colspan=2></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2></td><td colspan=2 align=center>04</td><td colspan=4 align=center>標準列表設備</td><td colspan=4 align=center>PRN</td><td colspan=4 align=center>打印機</td><td colspan=2></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
至此有關文件操作的幾個重要功能--建立、打開、讀寫、關閉--我們都已經討論,不是很全面,沒有深入的地方還要大家自行研究。我們下面的任務就是來討論文件句柄的一些輔助功能,以此做為這一內容的結束。
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18><font face="黑體"><a name="812">8.1.2 一些輔助功能</a></font></td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=18>
我們前面討論過使用FCB功能可以讀寫文件中任意一個記錄,只需在FCB中設置一些數據即可。而在討論文件句柄功能時我也曾談到我們所處理的文件以不再按照記錄塊和記錄的形式劃分,而是被看作"字節流"來處理。也就是說使用FCB功能時我們所能處理的最小單位是"記錄",而使用句柄功能時我們所能處理的最小單位就是字節。由此我們可以想到既然使用FCB功能操作文件時我們可以通過指定當前或隨機記錄號等方式處理文件中的任意記錄,那么使用句柄功能時我們也應能通過某種方法處理文件中的任一字節。這個方法就是我們將要討論的內容。<br>
在使用文件句柄功能時DOS雖然不再將文件劃分為記錄,但是它在讀寫文件時也要知道下一步所要處理的數據在文件中的具體位置。所以DOS在其內部使用了一個"文件讀寫指針"指向將要處理的數據。指針的概念大家想必已不再陌生,這里所說的"指針"其實就是一個雙字(32Bit)數據,這個數據存在于操作系統內部,當我們打開一個文件后,DOS會將這個數據設置為零,而后它返回給我們一個句柄并等待接受其它功能調用。如果我們使用了3FH功能讀取了32字節的數據,那么DOS就會修改這個"指針",把它增加32。如果我們再次使用3FH功能讀取數據,那么DOS就會從指針指向的位置讀取數據,同時再次增加指針的值。寫操作時同樣遵守這個規則。可以說,這個指針是DOS讀寫數據的重要依據,通過設置這個指針指向不同的位置,我們就可以讓DOS做到"指哪兒打哪兒"。為了更好地理解這個概念,請看下面這個程序:
</td>
<td></td><td></td> <!右邊距>
</tr>
<tr>
<td></td><td></td> <!左邊距>
<td colspan=2>
data<br>
<br>
fname<br>
buffer<br>
data<br>
code<br>
<br>
main<br>
<br>
</td>
<td colspan=2>
segment<br>
assume<br>
db<br>
db<br>
ends<br>
segment<br>
assume<br>
proc<br>
mov
</td>
<td colspan=5>
<br>
ds:data<br>
'config.txt',0<br>
?<br>
<br>
<br>
cs:code<br>
far<br>
ax,data
</td>
<td colspan=9>
<br>
<br>
;待處理的文件名<br>
;定義一個字節的文件緩沖區<br>
<br>
<br>
<br>
<br>
;初始化DS寄存器
</td>
<td></td><td></td> <!右邊距>
</tr>
</font>
<!頁腳線>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!頁腳>
<tr height=60 valign="top">
<td></td><td></td>
<td colspan=9><i>Copyright © 2004-2005 <a href="mailto:webmaster@nucstorm.com">Chunk Lee</a></i></td>
<td colspan=9 align="right"><i><a href="http://www.nucstorm.com" target="_top">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!導航條>
<p align="right"><a href="content1.html">目錄</a> <a href="page217.html">上一頁</a> <a href="page219.html">下一頁</a> <a href="page238.html">下一章</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -