– Các hàm khác: xem TLTK.
Trang 1Ch −¬ ng 5
Thao t¸c víi tËp tin
Trang 25.1 Luång d÷ liÖu vµ tËp tin
5.1.1 Lu ng d li u và thao tác vào/ra
– Lu ng d li u :
• Ph ng ti n trao đ i thông tin đ c l p v i các thi t b truy xu t (còn g i là kênh nh p/xu t).
• H th ng t o ra m t thi t b logic t ng ng v i thi t b vào/ra, g i
là lu ng d li u hay kênh nh p/xu t (th ng đ ng nh t v i t p).
• S d ng các hàm trong th vi n stdio.h
• Bao g m các lu ng vào (stdin), ra (stdout), báo l i (stderr), ph tr (stdaux), in (stdprn).
• Thông th ng là bàn phím, màn hình, c ng COM1, máy in trên PRN hay LPT1 Tuy v y H H có th h ng đ n thi t b khác.
Trang 35.1 Luång d÷ liÖu vµ tËp tin
Trang 45.1 Luång d÷ liÖu vµ tËp tin
– Là m t s nguyên đ c H H cung c p cho t p khi t o hay m t p.
– Các thông tin v t p (đã m ): mô t đ c đi m c a t p
• Các thu c tính c a t p : c tr ng thái đ c/ghi.
– C++ s d ng các h ng S_IREAD, S_IWRITE ( đ c, ghi ).
• Kích th c và tr ng thái : cho bi t s byte và tr ng thái c a t p.
– S d ng các hàm nh filelength, chsize, …
• Ch đ truy n: ki u nh phân hay ki u v n b n.
Trang 55.1 Luång d÷ liÖu vµ tËp tin
5.1.3 Thao tác vào/ra v i t p tin
– Các ki u vào/ra v i t p:
• M c cao (qua vùng đ m) và m c th p (không qua vùng đ m)
– C++ không cung c p c ch vào/ra å s d ng các hàm vào/ra trong các th vi n do trình d ch cung c p.
• Vào/ra m c cao ~ qua vùng đ m: s d ng b đ m (vùng nh trung gian) do ch ng trình (th c ch t là trình d ch) cung c p.
• Vào/ra m c th p ~ tr c ti p ~ m c h th ng (tuy nhiên v n có b
đ m do H H cung c p).
– Th vi n h tr vào/ra: stdio.h
• Tùy theo ki u vào/ra å s d ng các th vi n thích h p
• Tùy vào vi c g n các hàm này v i thi t b vào/ra nào, d li u s
đ c chuy n t /đ n thi t b đó (màn hình, bàn phím, t p, …)
Trang 65.2 Thao t¸c vµo/ra tÖp møc cao
Trang 75.2 Thao t¸c vµo/ra tÖp møc cao
Trang 85.2 Thao t¸c vµo/ra tÖp møc cao
5.2.2 Các hàm vào/ra m c cao
– Các hàm c b n (ti p)
getc, fgetc: đ c kí t t t p, tham s là con tr t p.
putc, fputc: ghi kí t lên t p, tham s là kí t và con tr t p.
VD: int c; //ho c char c;
Trang 95.2 Thao t¸c vµo/ra tÖp møc cao
fscanf(fp1, "%f%f", &x, &y);
fprintf(fp2, “(%5.2f, %4.3f)\n", x, y);
– Các hàm dùng cho ki u v n b n khác: xem TLTK
Trang 105.2 Thao t¸c vµo/ra tÖp møc cao
fread(c, 1, 100, fp1);
fwrite(c, 1, 100, fp2);
– Các hàm dùng cho ki u nh phân khác: xem TLTK
Trang 115.2 Thao t¸c vµo/ra tÖp møc cao
5.2.3 Vào/ra ng u nhiên
– Truy nh p ng u nhiên: thao tác v i con tr t p
• Con tr ch v trí c a t p có th tr đ n v trí b t kì trên t p.
• Các h ng ch v : SEEK_SET ~ 0, SEEK_CUR ~ 1, SEEK_END ~ 2.
• Các hàm thông d ng: fseek, ftell.
Trang 125.2 Thao t¸c vµo/ra tÖp møc cao
5.2.4 Cài đ t các thao tác vào/ra d li u
Trang 135.2 Thao t¸c vµo/ra tÖp møc thÊp
5.3.1 Khái ni m chung
– Vào/ra t p tin m c th p:
• Còn g i là h th ng vào/ra m c I, h th ng vào/ra gi ng UNIX hay
h th ng vào/ra không đ c cung c p vùng đ m.
– V nguyên t c, các hàm này không đ c đ nh ngh a trong ANSI C.
– Các hàm vào/ra m c th p là c s đ xây d ng các hàm vào/ra m c
cao å vi c tìm hi u chúng v n có ý ngh a nh t đ nh.
• Duy trì tính k th a và kh n ng t ng thích:
– Tính l ch s : C phát tri n trên n n UNIX, sau đó m r ng sang các
n n khác å gi l i các thao tác vào/ra m c th p đ duy trì tính k
th a và kh n ng t ng thích.
– C++ bao trùm lên C, ngoài các ph ng th c m i, v n s d ng l i các thao tác vào/ra c a C.
• G n g i v i các thao tác truy xu t c a máy:
Trang 145.2 Thao t¸c vµo/ra tÖp møc thÊp
5.3.2 Các hàm vào/ra m c th p thông d ng
– T p tin tiêu đ và bi n chu n
• S d ng các t p tiêu đ : io.h, fcntl.h, errno.h, sys/stat.h, dos.h, …
– S d ng bi n chu n (c a Turbo C) _fmode cho phép xác đ nh ki u
nh p/xu t (nh phân hay v n b n).
• Vào/ra s d ng th t p:
– H th ng vào/ra m c II s d ng kênh xu t/nh p và con tr t p.
– Các hàm thông d ng:
open, close: m , đóng t p (s d ng các ch đ truy nh p).
_open, _close: liên quan t i DOS.
read, write: đ c, ghi d li u.
lseek: truy nh p t p theo ch m c.
unlink: xóa t p.
• Cách s d ng: xem TLTK.
– Các hàm khác: xem TLTK.
Trang 155.4 Giao tiÕp víi hÖ thèng
5.4.1 Giao ti p v i h th ng s d ng th vi n dos.h
– Khái ni m chung
• T p h p thanh ghi c a b VXL 8086
– Thanh ghi công d ng chung (16 bit) : AX, BX, CX, DX.
• Phân thành các thanh ghi 8 bit : AH, AL; BH, BL; CH, CL; DH, DL.
– Thanh ghi đo n (16 bit): l u gi con tr đo n (CS, DS, SS, ES) – Thanh ghi đ l ch (16 bit): l u gi con tr đ l ch (IP, SP, BP, SI,DI)
• Thanh ghi IP ph i h p v i các thanh ghi đo n å đ a ch b nh ki u
đo n:đ l ch (segment : offset).
– Thanh ghi c (flag): ch a 9 c (m i c 1 bit): O, D, I, T, S, Z, A, P, C.
Trang 165.4 Giao tiÕp víi hÖ thèng
Trang 175.4 Giao tiÕp víi hÖ thèng
5.4.1 Giao ti p v i h th ng s d ng th vi n dos.h
– Ng t và x lý ng t (ti p)
• Th t u tiên c a ng t:
– Ng t có th tr u tiên cao s đ c CPU th c hi n tr c.
– u tiên cao nh t dành cho ng t không che đ c (NMI) Ng t lo i này
c nh báo CPU v m t l i ph n c ng nghiêm tr ng.
• B ng véct ng t:
– B ng véct ng t (IVT) ch a đ a ch c a thao tác s đ c th c hi n (khi
ng t t ng ng đ c sinh ra) Chi ti t h n xem TLTK.
– Có t t c 256 ng t, m i ng t chi m 4 byte b nh å t ng c ng 1KB Chúng chi m đ a ch t 0x00 đ n 0xFF.
– Có th có nhi u d ch v con g n v i m t ng t, chúng c ng đ c đánh
s trong h 16.
Trang 185.4 Giao tiÕp víi hÖ thèng
nh nhau trên t t c các máy PC (k t qu cu i cùng là nh nhau).
– DOS (c ng nh các H H khác) cung c p các hàm m c cao (m c
c s trên các d ch v c a BIOS, chúng ph c t p h n và có nhi u ch c
n ng h n (T t nhiên chúng ph i g i t i các hàm c a BIOS đ hoàn thành công vi c c a mình).
Trang 195.4 Giao tiÕp víi hÖ thèng
m i ng t ; th c hi n câu l nh g i ng t theo s hi u ng t ; l y k t qu
do ng t sinh ra (tham s đ u ra) t các thanh ghi.
– Có 2 ph ng pháp ch y u đ g i ng t : (s d ng các hàm khác nhau trong th vi n dos.h).
• Ph ng pháp g i ng t dùng hàm geninterrupt :
– S d ng các bi n gi thanh ghi: _FLAGS, _AX, _AH, _AL, _BX, … – G i hàm : void geninterrupt ( int sh_ng t );
Trang 205.4 Giao tiÕp víi hÖ thèng
5.4.1 Giao ti p v i h th ng s d ng th vi n dos.h
– X lý ng t m m (ti p)
• Ph ng pháp g i ng t dùng các hàm int86, int86x, intdos, intdosx :
– S d ng các c u trúc, h p: BYTEREGS, WORDREGS, REGS, SREGS,
REGPACK.
int int86x ( int sh_ng t, REGS *v, REGS *r, SREGS *s);
• S d ng hàm void segread (SREGS *s) đ đ t n i dung các thanh ghi đo n vào
c u trúc s (th ng dùng đ chu n b cho hàm int86x)
int intdosx (REGS *v, REGS *r, SREGS *s);
DOS thông qua giá tr c a v->h.ah ).
• Th c ch t các hàm này là hàm int86 (int86x) v i s hi u ng t là 0x21.
• S d ng hàm void intr ( int sh_ng t, REGPACK *reg) đ th c hi n ng t sh_ng t
Các tham s vào/ra đ u đ c xác đ nh qua reg.
Trang 215.4 Giao tiÕp víi hÖ thèng
5.4.1 Giao ti p v i h th ng s d ng th vi n dos.h
– X lý ng t m m (ti p)
• M t s l u ý:
– Các hàm int86x và intdosx khác các hàm int86 và intdos ch chúng
có th truy nh p vào d li u m t đo n khác.
– Nên s d ng các hàm int86 (int86x) ho c intdos (intdosx) vì chúng
ch can thi p gián ti p vào các thanh ghi c a CPU å an toàn h n hàm
Trang 225.4 Giao tiÕp víi hÖ thèng
Trang 235.4 Giao tiÕp víi hÖ thèng
• Cung c p các d ch v truy nh p t i chúng cho các ng d ng Vi c cung
c p này đ c th c hi n thông qua API.
– i v i l p trình viên, m i H H đ c đ nh ngh a b i API c a nó.
• Application Programming Interface : Giao di n l p trình ng d ng.
– API là t p h p các ki u d li u, hàm và đ nh ngh a hàm đã đ c H H thi t k s n.
Trang 245.4 Giao tiÕp víi hÖ thèng
5.4.2 Giao ti p v i h th ng s d ng API
– API và Windows API (ti p)
• API – Application Programing Interface:
– Cung c p ti n ích đ ng d ng có th truy nh p vào h th ng.
– API th ng đ c vi t b i ngôn ng dùng đ vi t H H.
• Ví d , MS-DOS đ c vi t b ng h p ng å đ nh ngh a giao di n m c
h p ng : n p giá tr vào thanh ghi và g i ng t.
– Tuy v y c ng có các API khác cho các ngôn ng khác mà b n thân
chúng l i g i t i t p API c s
• Ví d các hàm C trong th vi n C cung c p các d ch v DOS qua ng t INT 0x21, các d ch v t ng ng c a DOS đ c g i tùy thu c vào giá tr
đ t vào thanh ghi.
• Ví d khác v API : UNIX đ c vi t b ng C å cung c p m t th vi n hàm C JavaOS đ c vi t b ng Java å cung c p t p h p các l p Java.
Trang 255.4 Giao tiÕp víi hÖ thèng
5.4.2 Giao ti p v i h th ng s d ng API
– API và Windows API (ti p)
• Windows API:
– Là h th ng g m nhi u ki u d li u và hàng nghìn hàm khác nhau – Cung c p cho ng d ng giao di n đ h a, hi n th hình nh, v n b n
đa đ nh d ng, qu n lý các đ i t ng h th ng nh b nh , t p, ti n trình, …giúp cho vi c phát tri n ng d ng trong môi tr ng Windows
Trang 265.4 Giao tiÕp víi hÖ thèng
– Th vi n đi u khi n chung:
• Giúp cho giao di n ng d ng nh t quán, gi m b t th i gian, công s c xây d ng các đi u khi n.
– Giao di n thi t b đ h a:
• Cung c p các hàm và c u trúc liên quan đ xu t ra màn hình, máy in và các thi t b khác.
Trang 275.4 Giao tiÕp víi hÖ thèng
5.4.2 Giao ti p v i h th ng s d ng API
– S d ng Windows API (ti p)
• Các nhóm ch c n ng trong Windows API (ti p):
– Các d ch v m ng:
• Cho phép giao ti p gi a các ng d ng trên các máy tính khác nhau trên
m ng, t o, qu n lý các k t n i đ chia s tài nguyên (th m c, máy in
• Cho phép s d ng các ng d ng m t cách th ng nh t, ti n l i cho truy
nh p, qu n lý.
Trang 285.4 Giao tiÕp víi hÖ thèng
5.4.2 Giao ti p v i h th ng s d ng API
– S d ng Windows API (ti p)
• Các ki u d li u trong Windows API:
– Là các ki u d li u đ n gi n, đ c Windows API h tr , s d ng đ
đ nh ngh a các giá tr hàm tr v , tham s và thông đi p hàm, các thành ph n c u trúc.
– Windows API đ nh ngh a kích th c và ý ngh a c a các thành ph n này, s d ng th (handle) đ tham chi u t i m t tài nguyên.
Trang 295.4 Giao tiÕp víi hÖ thèng