Tải bản đầy đủ (.pdf) (5 trang)

Các chức năng về file và thư mục của hệ điều hành DOS

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (73.36 KB, 5 trang )

100
CHƯƠNG 15 :
CÁC CHỨC NĂNG VỀ FILE VÀ THƯ MỤC CỦA HỆ ĐIỀU HÀNH DOS
Các chức năng cơ bản của hệ điều hành DOS đều tập trung vào Interrupt 21h. Số hiệu của chức
năng được đặt trong thanh ghi AH,các tham số được đặt trong các thanh ghi còn lại. Các chuỗi được sử
dụng trong interrupt 21h thường là các dãy ASCIIZ (các dãy ký tự kết thúc bằng mã 0). Khi chức năng
thực hiện gặp lỗi, cờ hiệu CF được dựng lên và mã lỗi thường được đặt trong AX.
Để truy nhập thông tin trong một file cần phải có các thông số như :
- Tên file.
- Vò trí lưu chứa directory entry.
- Các cluster lưu chứa thông tin của file.
- Kích thước file hiện hành.
- Vò trí của con trỏ file.
- ....
Các thông số này được đặt trong một cấu trúc đặc biệt gọi là FCB (File Control Block) . Các chức
năng về file sẽ dựa theo thông tin trong FCB để thực hiện. Mỗi file được điều khiển bởi một FCB. Trước
khi file được truy nhập, FCB tương ứng với nó phải được chuẩn bò các thông số cơ bản (thông thường đó là
các thông tin chứa trong directory entry tương ứng với file). Việc thiết lập các thông số ban đầu cho một
FCB được gọi là tác vụ mở file (open file). Thông thường thì các chương trình ứng dụng chỉ cần chỉ ra một
FCB đã có chứa sẵn tên file và yêu cầu hệ điều hành “mở file”. Hệ điều hành sẽ tìm kiếm và điền đầy
đủ các thông tin còn lại vào FCB ấy. Sau đó, mỗi lần cần truy nhập file, chương trình ứng dụng sẽ gọi đến
chức năng tương ứng của hệ điều hành đính kèm với đòa chỉ của FCB. Các chương trình ứng dụng phải tự
mình tạo ra và quản lý các FCB. Điều này không được thuận tiện cho lắm khi phát triển các version mới
của hệ điều hành : cấu trúc của FCB là bất biến. Để khắc phục vấn đề này, một cung cách tổ chức ở mức
cao hơn được đưa ra : hệ điều hành tạo ra một cấu trúc tương tự như một mảng các FCB trong vùng nhớ
riêng của nó. Khi chương trình ứng dụng cần mở một file, chỉ cần gọi chức năng mở file của hệ điều hành
cùng với tên của file. Hệ điều hành sẽ tự động cấp phát một FCB còn trống, điền các thông số cần thiết
vào đó và trả lại cho chương trình ứng dụng số hiệu của FCB đó (gọi là file handle number). Các tác vụ
trên file kế tiếp chỉ cần đính kèm với số hiệu tương ứng của file.
Mặt khác, ý niệm về file handle đã được mở rộng ra nhiều so với FCB. DOS quan niệm file handle
là một đầu mối có thể cung cấp hoặc tiếp nhận thông in theo một số cung cách nhất đònh tùy theo thuộc


tính của từng file handle. Theo đó file handle không chỉ quản lý các file trên đóa, mà còn có thể đại diện
cho các thiết bò khác.
Thí dụ :
Bàn phím là một nguồn cung cấp dữ liệu một cách tuần tự.
(Tương đương với một file mở ở mode read only)
Máy in là một nơi tiếp nhận dữ liệu một cách tuần tự.
(Tương đương với một file mở ở mode write only)
Mặc dù hệ điều hành DOS cung cấp cả hai cung cách truy nhập file (theo FCB và theo file handle ),
nhưng các chức năng dùng trực tiếp FCB chỉ nhằm tương thích với các version đầu tiên của DOS mà thôi.
Trong tài liệu này, húng ta sẽ chỉ đề cập đến các chức năng dùng file handle.
15.1CÁC CHỨC NĂNG VỀ FILE
15.1.1Tạo lập file (Create)
101
Input : AH = 3Ch
CX = File attribute
DS:DX = ỴBuffer chứa file name (ASCIIZ)
Output : CF = 1 --> AX = error code
CF = 0 --> AX = file handle number
(file tự động được mở với mode đọc/ghi)
15.1.2Mở file (Open)
Input : AH = 3Dh
AL = 0 --> mode read only
= 1 --> mode write only
= 2 --> mode read/write

DS:DX = ỴBuffer chứa file name (ASCIIZ)
Output : CF = 1 --> AX = error code
CF = 0 --> AX = file handle number
15.1.3Đóng file (Close)
Input : AH = 3Eh

BX = File handle
Output : CF = 1 --> AX = error code
15.1.4Đặt con trỏ file (Set file pointer)
Input : AH = 42h
AL = mode
BX = File handle
CX:DX = số gia (DWORD)
AL = 0 --> file pointer := CX:DX
AL = 1 --> file pointer := CX:DX + file pointer
AL = 1 --> file pointer := CX:DX + file size
Output : CF = 1 --> AX = error code
CF = 0 --> DX:AX = gia trò mới của file pointer
15.1.5Đọc file (Read)
Input : AH = 3Fh
BX = File handle
CX = Số byte đọc
DS:DX = ỴBuffer
Output : CF = 1 --> AX = error code
CF = 0 --> AX = số byte thực sự được đọc
Dữ liệu bắt đầu từ vò trí hiện hành của file pointer được đọc vào buffer. Không thể đọc vượt quá vò
trí cuối file.
15.1.6Ghi file (Write)
Input : AH = 40h
BX = File handle
CX = Số byte ghi
102
DS:DX = ỴBuffer
Output : CF = 1 --> AX = error code
Dữ liệu trong buffer được ghi xuống file bắt đầu từ vò trí hiện hành của file pointer. Nếu gặp vò trí
cuối file, kích thước file sẽ được mở rộng ra theo số byte ghi thêm.

Nếu CX = 0 --> kích thước file sẽ được gán bằng giá trò của file pointer hiện hành. Trong trường hợp
này file có thể bò cắt ngắn đi hoặc mở rộng ra tùy theo vò trí của file pointer .
15.1.7Hủy bỏ file (Delete)
Input : AH = 41h
DS:DX = ỴBuffer chứa file name (ASCIIZ)
(File name có thể bao gồm đầy đủ tên ổ đóa và PATH)
Output : CF = 1 --> AX = error code
15.1.8Xem/sửa file attrib
Input : AH = 43h
AL = 0 --> lấy file attrib
= 1 --> đặt file attrib mới

CX = Attribute mới (AL=1)
DS:DX = ỴBuffer chứa file name (ASCIIZ)
Output : CF = 1 --> AX = error code
CF = 0 --> CX = file Attribute (AL=0)
15.2CÁC CHỨC NĂNG VỀ THƯ MỤC
15.2.1Tạo thư mục
Input : AH = 39h
DS:DX = ỴBuffer chứa directory name (ASCIIZ)
15.2.2Xóa thư mục
Input : AH = 3Ah
DS:DX = ỴBuffer chứa directory name (ASCIIZ)
15.2.3Chỉ đònh thư mục hiện hành
Input : AH = 3Bh
DS:DX = ỴBuffer chứa directory name (ASCIIZ)
15.2.4Lấy tên thư mục hiện hành
Input : AH = 47h
DL = driver code ( 0=default,1=A,2=B,3=C ...)
DS:SI = Address of 64 bytes buffer

Path name trả lại không bắt đầu bằng tên ổ đóa lẫn dấu ‘\’ và kết thúc bằng mã 0h
15.2.5Tìm directory entry đầu tiên trong thư mục
Input : AH = 4Eh
CX = search attribute
DS:DX = ỴBuffer chứa search name (ASCIIZ)
103
search name có thể chỉ đònh bằng các ký hiệu ‘?’ hay ‘*’.
Nếu tìm thấy, các thông tin của phần tử này được đặt trong DTA
15.2.6Tìm directory entry kế tiếp trong thư mục
Input : AH = 4Fh
DOS sử dụng các thông tin cung cấp bởi lời gọi chức năng 04E trước đó ( lưu giữ trong DTA từ byte
0 -> 14 ) để tìm phần tử kế tiếp .
Nếu tìm thấy, các thông tin của phần tử này được đặt trong DTA
15.2.7Cấu trúc DTA (Disk transfer area)
00 -> 14 : Vùng dành riêng của DOS
15 : File attribute
16 -> 17 : File time
18 -> 19 : File date
1A -> 1D : File size
1E -> 2A : File name ( Kết thúc bằng mã 0h )
Thông thường khi chương trình vừa được gọi thực hiện DTA được đặt tại offset 080h của PSP .
Đối với file dạng COM, đòa chỉ này là CS:080
Lấy đòa chỉ DTA :
Input : AH = 02Fh
Output: ES:BX = segment:offset of DTA
Đònh đòa chỉ DTA :
Input : AH = 01Ah
DS:DX = segment:offset of DTA
15.2.8Duyệt cây thư mục
Ta có thể sử dụng hai chức năng 4Eh và 4Fh để hiển thò tất cả các file có tên trùng với Search—

name trên toàn đóa theo giải thuật sau:
Search—path : là path dò tìm hiện tại
Search—name : tên của phần tử cần tìm (có thể bao gồm ? và * )
1.Tạo Search—path bắt đầu từ thư mục chủ (Root)
<Driver—name>:\ ; Thí dụ A:\
2.Tìm tất cả các file theo Search—name bằng cách :
Gọi chức năng 04Eh với
CX = 012h
DS:DX = segment:offset of Search—path+Search—name
Hiển thò tên file vừa tìm thấy
Gọi chức năng 04Fh cho đến khi hết tìm thấy .
3.Tìm thư mục đầu tiên trong Search—path bằng cách gọi chức
chức năng 04Eh với
CX = 012h ( Tìm cả những thư mục “dấu mặt” )
DS:DX = segment:offset of Search—path+’\*.*’
Nếu không tìm thấy :
3.1
Nếu Search—path đang chỉ vào thư mục chủ thì kết thúc
Nếu Search—path đang chỉ vào một thư mục con thì :
3a. Bỏ tên thư mục cuối cùng trong Search—path và trả lại DTA trước đó
104
3b. Tìm tên thư mục kế tiếp bằng chức năng 04Fh
( Tìm theo thông tin của DTA vừa lấy lại )
Nếu không tìm thấy lặp lại bước 3.1
Nếu tìm thấy, tiếp tục bước 4
4.Thêm tên thư mục mới tìm thấy vào Search—path
Hiển thò Search—path mới
5.Lưu DTA hiện tại và tạo DTA mới với Search—path mới
6.Lặp lại bước 2
15.3CÁC MÃ LỖI THƯỜNG GẶP CỦA INTERRUPT 021H :

Hex Dec Meaning
--- --- -----------------------
1 1 Invalid function number
2 2 File not found
3 3 Path not found
4 4 Too many open files
5 5 Access denied
6 6 Invalid handle
7 7 Memory ctrl blocks destroyed
8 8 Insufficient memory
9 9 Invalid memory block address
0aH 10 Invalid environment
0bH 11 Invalid format
0cH 12 Invalid access code
0dH 13 Invalid data
0eH 14 (not used)
0fH 15 Invalid drive specified
10H 16 Can’t remove current directory
11H 17 Not same device
12H 18 No more matching files

×