Sunteți pe pagina 1din 7

9.

EXPLOATAREA FIIERELOR CU INDICATOR LOGIC


(HANDLE)
9.1. Conceptul e !n!c"to# lo$!c (%"nle)
Alocarea fiierelor pe disc este discontinu pe clustere a cror adres se afl din
tabela de alocare a discului (FAT). Programatorul vede fiierul ca fiind continuu, iar
adresa unei informaii se d relativ la nceputul fiierului. !ist un singur mod de
organi"are a fiierelor pe disc, cel pre"entat la nceputul capitolului i dou moduri de
e!ploatare#
E&plo"t"#e" '!(!e#elo# cu ut!l!)"#e FC* a fost prima modalitate e!istent n
$%& i reali"ea" citirea'scrierea din fiier l" n!+el e ,n#e$!-t#"#e, specific(nd
lungimea nregistrrii i numrul nregistrrii transferate.
E&plo"t"#e" '!(!e#elo# cu !n!c"to# lo$!c permite adresarea informaiei l" n!+el
e octet '"./ e ,nceputul '!(!e#ulu!0 specific(nd lungimea transferat n octei.
)etoda a aprut n $%& *+, c(nd prin apariia ,ard-disc-ului pe P. /T (01)2),
sau introdus subdirectoare i trebuia specificat numele fiierului i calea. 3n F.2
se putea specifica numai numele fiierului.
3n $%& *+ s-a adugat un nou set de funcii pentru e!ploatarea informaiilor din
fiiere sc,imb(nd i principiile de lucru. 4a iniiali"area sistemului se aloc un numr de
peste 011 de F.2-uri gestionate de sistem. Aceasta este limita numrului de fiiere care
vor putea fi desc,ise simultan n aplicaii. Nu1ele '!(!e#ulu! inclusiv calea se d ntr-un
te!t A&.33 de lungime variabil te#1!n"t cu 22H definit sub forma#
F!-1 D* 3C45P#o$5L"6o#"to#5PLA5F!-!e#1.t&t302
4a e-c%!e#e" '!(!e#ulu! se ncarc n D74DX adresa te!tului care d nu1ele
'!(!e#ulu!. &e caut fiierul n directorul specificat i i se aloc un F.2 sistem al crui
%"nle# (po!nte#) -e #etu#ne")/ ,n #e$!-t#ul AX i -e +" ,nc"#c/ ,n *X naintea
apelrii altor funcii care se refer la acel fiier. $up e!ecutarea oricrei funcii CF82
dac ope#".!" " #eu(!t i CF81 dac a aprut o e#o"#e.
$ac se utili"ea" e!ploatarea cu indicator logic atunci trebuie specificat adresa
primului octet citit'scris din fiier i lungimea n octei a informaiei transferate. Adresa
octetului curent referit din fiier se ine n pointerul de citire'scriere (din F.2-ul alocat),
care se modific cu funcia de po"iionare (506). 4a desc,iderea fiierului adresa curent
este 1 i se refer la nceputul fiierului.
0
F!-!e#.t&t
A#.!n '!-!e#
(Pointer cit'scr)
*X8%"nle# CX8lun$ !n octet!
9e1o#!e
D74DX
9.:. Func.!! DO7
;CH C#e"#e '!(!e# (C#e"te) .reea" n directorul specificat o etic,et de fiier nou.
A67+.6 codul funciei de creare fiier nou
D74DX 7adres ir A&.33 cu nu1ele '!(!e#ulu! urmat de 116
CX conine "t#!6utul '!(!e#ulu!
11 8 fiier normal
10 8 fiier read'onl9 (prote:at la scriere)
1; 8 fiier ascuns
15 8 fiier sistem
Ie(!#e dac CF82 atunci AX con.!ne !n!c"to#ul lo$!c (,andle) atribuit fiierului
CF81 operaie eronat i A/ conine codul erorii
(+ nu s-a gsit calea, 5 prea multe fiiere desc,ise, < acces inter"is)
;DH De-c%!e#e '!(!e# e&!-tent (Open) se poate desc,ide orice fiier inclusiv cele
ascunse.
3ntrare A67+$6 codul funciei $%&
A4 conine coul e "cce-
(1 citire permis,0 scriere permis, ; scriere citire, primii bii acces parta:at)
D74DX 7adres ir A&.33 cu nu1ele '!(!e#ulu! urmat de 116
Ie(!#e AX con.!ne !n!c"to#ul lo$!c (,andle) sau cod de eroare (.F70)
;EH Inc%!e#e '!(!e# 3nc,ide fiierul al crui !n!c"to# lo$!c -<" "t ,n *X
A67+6 cod funcie $%& nc,idere fiier
*X 8!n!c"to#ul lo$!c al fiierului
;
;FH C!t!#e !nt#<un '!(!e# (Re") indicat prin 2/ care conine indicatorul alocat
(,andle), ntr-o "on de memorie dat prin $&#$/ de la adresa de fiier indicat de
pointer-ul de citire'scriere i lungime n numr de octei dat n ./.
3ntrare A6 7 +F6 cod funcie $%& de citire din fiier
*X 8 !n!c"to# lo$!c fiier referit (,andle)
D74DX 8"#e-/ )on/ de memorie (buffer)
CX 8nu1/# e octe.! transferai (lungime)
3eire A/ 7numr de octei citii dac .F71 (A/71 este %F sf(rit de fiier).
3ncrementare automat pointer citire'scriere cu lungimea citit.
=2H 7c#!e#e ,nt#<un '!(!e# (>#!te) indicat prin 2/, care conine indicatorul alocat
(,andle), dintr-o "on de memorie dat prin $&#$/, la adresa de fiier indicat de
pointer-ul de citire'scriere i lungime n numr de octei dat n ./. Pointerul de
scriere'citire se incrementea" automat cu lungimea transferat dup operaie.
3ntrare A6 7 +F6 cod funcie $%& de scriere n fiier
*X 8 !n!c"to# lo$!c fiier referit (,andle)
D74DX 8"#e-/ )on/ de memorie (buffer)
CX 8nu1/# e octe.! transferai (lungime)
3eire dac .F71 operaie reuit
=1H te#$e#e" unu! '!(!e# a crui nume se d ca te!t A&.33 n $&#$/ (inclusiv calea).
$ac se omite discul sau calea se ia din directorul curent.
A67506 cod funcie $%& tergere fiier
*X8!n!c"to# lo$!c fiier referit (,andle)
=:H Po)!.!on"#e po!nte# c!t!#e?-c#!e#e (L7EE@) pentru fiierul asociat indicatorului
logic (,andle) dat n 2/ i pstrat n F.2-ul alocat de sistem, preci"(nd referina (adresa
curent, nceputul sau sf(ritul fiierului). $up fiecare transfer pointerul de citire'scriere
se actuali"ea" cu lungimea transferat.
A675;6 cod funcie po"iionare pe fiier
AL coul 1etoe! de po"iionare
1 8 fa de nceputul fiierului
0 8 fa de po"iia curent
; 8 fa de sf(ritul fiierului
*X 8 !n!c"to#ul lo$!c al fiierului referit (,andle)
CX4DX 8"#e-" #el"t!+/ ,n '!(!e# ,n octei a informaiei ce se transfer
=;H C!t!#e?7et"#e "t#!6ute '!(!e# permite sc,imbarea atributelor fiierului setate la
creare sau pe parcurs.
A675+6 funcie $%& setare atribute fiier
AL 8 co -u6'unc.!e (1 8 citire atribute, 0 8 setare atribute)
D74DX 8 "#e-/ nu1e '!(!e# ca te!t A&.33
CX +"lo"#e "t#!6ute citite sau de setat
(1 8 normal, 0 8read'onl9,; 8 ascuns, 5 sistem, ;16 ar,iva).
+
9.;. P#o$#"1 e -c#!e#e -! c!t!#e te&te ,n '!(!e#
Pre"entm mai :os un e!emplu de scriere i citire r(nduri de te!t ntr-un fiier
e!ploatat cu indicator logic. &e observ modul de definire a numelui fiierului.
4a nceput se definesc macroinstruciunile utili"ate la apelarea funciilor $%&,
care pot fi plasate ntr-un fiier program separat pentru a putea fi utili"ate i din alte
programe. Prin directiva 3=.4>$ fiierul de macroinstruciuni se copia" n
seciunea ..%$ din program.
&e vor concepe alte programe care s utili"e"e macroinstruciunile definite.
A UTILIBARE FI7IERE PRIN IDENTIFICATOR LOGIC
A DEFINIRE 9ACROIN7TRUCTIUNI FOLO7ITE
? 77777777777777777777777777777777777777777
A CITIRE 7IR DE LA CON7OLA 7I CO9PLETARE LF 7I C
? -----------------------------------------
c!tD-!# 1"c#o -!#1 A completare .@,4F i ABA dup te!tul introdus
mov d!,offset sir0 ? adresa de receptie
mov a,,1A, ? functie dos citire sir
int ;0,
!or b,,b, ? in 2/ lungime sir receptionat
mov bl,sir0C0
mov sir0Db!C+E,01 ? cod 4F (linie noua) la sfirsit
mov sir0Db!C5E,FBF ? indicator sfirsit sir
mov dl,01 ? linie noua dupa receptie
mov a,,1;, ? functie afisare un caracter
int ;0,
endm
A AFI7ARE 7IR TER9INAT CU C PE ECRAN
? -----------------------------------------
t!pD-!# 1"c#o -!#:
mov d!,offset sir; ? adresa sir de afisat
mov a,,1G, ? functie afisare sir
int ;0,
endm
5
A AFI7ARE EROARE DUPA EXECUTIE 9ACRO
? -----------------------------------------
t!pDe## 1"c#o n# A "'!("#e nu1"# e#o"#e
tipHsir err ? afisare mesa: de eroare
mov dl,nr ? urmat de numar eroare
or dl,+1,
mov a,,1;, ? afisare un caracter
int ;0,
mov dl,01 ? rind nou - 4F si .@
int ;0,
mov dl,0+
int ;0,
mov a,,5., ? terminare program
int ;0,
endm
A DE7CHIDERE FI7IER EXI7TENT
? -----------------------------------------
opD'!- 1"c#o nu1e10%"nle ? nume si adresa indicator logic
local cont ? etic,eta locala in macro
clc ? anulare fanion .F
mov a,,+d, ? functie desc,idere fisier
mov d!,offset nume0 ? adresa "ona cu nume fisier
mov al,1;, ? mode de desc,idere @'I
int ;0,
:nc cont ? .F 7 1 operatie corecta
t!pDe## "l A CF 8 1 afisare eroare din A4
cont label near ? definire etic,eta locala
1o+ %"nle0"& A -"l+"#e !n!c"to# lo$!c !n AX
endm
A INCHIDERE FI7IER
?------------------------------------------
clD'!- 1"c#o %"nle1 ? adresa indicator logic
local cont
clc
mov a,,+e, ? functie inc,idere fisier
mov b!,,andle0 ? incarcare indicator logic
int ;0,
:nc cont ? .F 7 1 operatie corecta
tipHerr al ? .F 7 0 afisare eroare din A4
cont label near
endm
<
A CITIRE 7IR DE LUNGI9E DATA DIN FI7IER
? de la adresa data de pointerul de citire'scriere
? -----------------------------------------
c!tD'!- 1"c#o %"nle10lun$06u'' ? ,andle,lungime,tampon
local cont
clc
mov a,,+f, ? functie citire fisier
mov b!,,andle0 ? 2/ 7 indicator logic
mov c!,lung ? numar octeti cititi
mov d!,offset buff ? adresa "ona memorie
int ;0,
:nc cont ? .F 7 1 citire corecta
tipHerr al ? afisare eroare din A4
cont label near
endm
A 7CRIERE IN FI7IER UN 7IR DE CARACTERE
? la adresa disc data de pointerul de citire scriere
?------------------------------------------
-c#D'!- 1"c#o %"nle10lun$06u'' ? ,andle,lungime,tampon
local cont
clc
mov a,,51, ? functie scriere in fisier
mov d!,offset buff ? adresa "ona memorie
mov c!,lung ? numar octeti transferati
mov b!,,andle0 ? 2/ 7 indicator logic fisier
int ;0,
:nc cont ? .F 7 1 scriere corecta
tipHerr al ? afisare eroare din A4
cont label near
endm
A POBITIONARE POINTER DE CITIRE 7CRERE IN FI7IER
? adresa octet referitor la inceputul fisierului ./,$/
? -----------------------------------------
l-eeE 1"c#o %"nle0t!p0lun$10lun$:
local cont
mov a,,5;, ? functie setare pointer cit'scr
mov c!,lung0 ? adresa octet din fisier in ./,$/
mov d!,lung;
mov b!,,andle ? 2/ 7 indicator logic fisier
mov al,tip ? referinta inceput71, po"itia curenta 70, sfirsit7;?
int ;0,
:nc cont ? .F 7 1 operatie reusita
tipHerr al ? tiparire cod eroare din A4
cont label near
endm
J
A PROGRA9 PRINCIPAL
A8888888888888888888888888
dosseg
.model small
.stacK ;<J
."t"
numeHfis db F.#L&tudLPlaLfis.t!tF,1 ? numele fisierului
,andle dM 1 ? indicator logic fisier
buf db <1,1,<1 dup (N) ? "ona tampon pentru dialog
mes db F3ntroduceti 01 siruri de caractere#F,0+,01,FBF
mes0 db 0+,01,F.ontinutul fisierului#F,0+,01,FBF
err db 0+,01,Froare scr'cit fisier nr# BF
.coe
includedisclogi.inc ? definiri macro lucru cu fisiere
start# mov a!,Odata
mov ds,a!
opHfis numeHfis,,andle ? desc,idere fisier
tipHsir mes ? mesa: dialog
mov c!,01 ? numar de rinduri citite
l0# pus, c!
citHsir buf ? citire rind tastatura
scrHfis ,andle,0<,bufC; ? scriere rind in fisier
pop c!
loop l0 ?ciclu citire rinduri
tipHsir mes0 ? mesa: afisare fisier
lseeK ,andle,1,1,1 ? po"itionare inceput fisier
mov c!,01 ? contor inregistrari citite
l;# pus, c!
citHfis ,andle,0<,bufC; ? citire din fisier 0< octeti
tipHsir bufC; ? afisare octeti cititi
pop c!
loop l; ? ciclu citire de pe fisier
clHfis ,andle ? inc,idere fisier
mov a!,5.11, ? terminare program
int ;0,
end start ? adresa de lansare
P

S-ar putea să vă placă și