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

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

Đang tải... (xem toàn văn)

Thông tin tài liệu

100 CHƯƠNG 15 : CÁC CHỨC NĂNG VỀ FILE 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 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 yêu cầu hệ điều hành “mở file”. Hệ điều hành sẽ tìm kiếm đ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 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ứcmứ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 đó 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 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 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 ‘\’ 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 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 ? * ) 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 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 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 . : 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á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ệ

Ngày đăng: 29/09/2013, 11:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan