Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
474,67 KB
Nội dung
CHNG3:NHPVÀXUTDLIU §1.KHÁINIMCHUNG 1.Kháinim: Trcđâychúngtađãxétvicnhpdliutbànphím. Trongnhiutrnghpthct,đthunli,chúngtaphinhpdliu t cáctptintrênđĩa.CáchàmthvincaCchophéptruycptptinvà chialà2cpkhácnhau: cáchàmcp1làcáchàmcpthpnht,truycptrc tipđncác tptintrênđĩa.Ckhôngcungcpvùngnhđmchocáchàmnày cáchàmcp2làcáchàmtruyxuttptincaohn,dochúngđcC cungcpvùngnhđm. Đi vicáchàmcp1,tptinđcxemlàkhicácbyteliêntcdođó khimuntruycpmutincththìphitínhtoánđachcamutinvà nhvycôngvi cvtvhn.Ngoàiraphicungcpvùngnhđmcho kiuđcghinày.Đivicáchàmcphaicôngvicnhnhànghndo: trìnhbiêndchtđngcungcpvùngkíc đmchochúng cóth truy xut các mutinmàkhônggpkhókhănnhvicác hàmcp1 TrongC,cácthôngtincnthitchocáchàmxutnhpcp2đcđt trongt ptinstdio.hcòncácthôngtinvhàmnhpxutcp1thìtrong tptinio.h 2.Streamvàcáctptin:Taphiphânbithaithutnglàstreamvàfile. H thng xut nh p ca C cung cp mt không gian tng tng gia ngilptrìnhvàcácthitbđcdùng.Cptrunggiantngtngnày gilàstreamvàthitbcthlàtp tin. a.Cácstreams:Trongmáytínhtadùng2loistream:vănbnvành phân.Mtstreamvănbnlàmtlotkít đctchcthànhdòngmà midòngđcktthúcbngkítxungdòngnewline(“\n”).Khighi,mt kítchuyndòngLF(mã10)đcchuynthành2kítCR(mã13)vàLF. Khiđc2kítliêntipCRvàLFtrêntptinchchotamtkí tLF.Mt streamnhphânlàmtlotcácbyte. b. Các tp tin: Trong C, mt tp tin là mt khái nim logic mà h thng có th áp dng cho mi th t các tp tin trênđĩa chođn các terminal. Khibtđuthchinchngtrình,máytínhm3streamvăn bnđãđcđnhnghĩatrclàstdin,stdoutvàstderr.Đivihuhtcác hthng,các thitbnàylàconsole. §2.NHPXUTCHUN 27 1.Nhpxutkít,chuikít,đnhdngvàbnghi: Nhp xutcp2 (nhpxutchun)cungcp4cáchđcvàghidliukhácnhau(ngcli nhpxutcâp1chdùng1trong4cáchnày). Trchtdliucóthđcghimilnmtkít,tngtnhcách làmviccaputchar()vàgetche()đđcdliut bànphímvàhinthlên mànhình. Thhai,dliucóthnhpxuttheochuibngcácdùngcáchàm gets()vàputs() Thba,dliucóthđcnhpvàxuttheokhuôndngb ngcác hàmfprintf()vàfscanf() Tht,dliuđcđcvàghitheokhicóchiudàicđnhthng dùnglutrmnghaycutrúcbngcáchàmfread()vàfwrite().Tómli: Cáchàmdùng chungchohaikiunhphânvàvănbn fopen:dùngmtptin fclose:đóngtptin fclose:đóngttccáctptin fflush:dùnglàmschvùngđmcatptin flushall: dùnglàmschvùngđmcattctptin ferror:chobitcóli(kháckhông)haykhôngcóli(bng0) perror:thongbáolitrênmànhình foef:chobitcuitptinhaycha unlinkvàremove:dùngđloitptintrênđĩa fseek:dichuyncontrđnvtríbtkìtrêntptin ftell:chobitvtríhinticacontr Cáchàmnhpxutkít putcvàfputc:nhpkítvàotptin getcvàfgetc:đckítttptin fprintf:dùngghidliuđnhdnglêntptin fscanf:dùngđc dliuđnhdngttptin fputs:dùngghichuilêntptin fgets:dùngđcchuittptin Cáchàmdùngchokiuxutnhpnhphân putw:dùngghimts nguyênhaibytelêntptin gets:dùngđcmtsnguyênhaibytettptin fwrite:dùngghimtmutinlêntptin fread:dùngđcmtmutinttptin 2.D ngvănbnvàdngnhphân: Cáchkhácđphânloicác thao tác nhpxuttptinlànóđcmtheokiuvănbnhaynhphân.Đimkhác 28 bitgiahailoinàylàkítnewlinevàendofline.Đimthhaiđphân bithaikiutptinlàlàcáchlutrcácsvàođĩa.Đividngvănbn thìcács đclutrthànhchuicáckítcòndngnhphânthìcács đclunhtrongbnh,nghĩalàdùnghaibytechomtsnguyênvà4 bytechomtsfloat. 3.Nhpxut chun:Chngtrìnhdùngcáchàmnhpxutcp2thng dhiuhnnênchúngtasnghiêncutrc. a.Nhpxutkít:Đnhpkítvàotptintadùnghàm putc()hay fputc().Đđckítttptintadùnghàmgetc()hayfgetc().Chngtrình vídnàylàtolpcáckítbngcáchgõvàobànphímmilnmtkít vàghivàomt tptintrênđĩa.Chngtrìnhdùnghàmfopen()đmmt tp tin, dùng hàm putc()đghi lên tp tin,dùng kít enterđkt thúc chngtrình. Chngtrình31 #include<stdio.h> #include<conio.h> voidmain() { FILE*fp; charch; printf(“Nhapcackitu:“); fp=fopen(textfile,w); while((ch=getche())!=\r) putc(ch,fp); fclose(fp); } b.Mmttptin:Trckhighimttptinlênđĩataphimtptin đó đã.Đmtptin,trchttaphikhaibáomtcontrchtiFILE. FILElàmtstructurechađngcácthôngtinvcutrúccatptinvíd nhkíchthc,v trícabđmdliuhinhành.CutrúcFILEđc khaibáotrongstdio.hnêntacnincludetptinnày.Ngoàirastdio.hcòn xácđnhcáctênvàcácbinkhácđcdùngtrongchngtrìnhhngđn cáctptin.Dovytrongchngtrìnhtacócâulnh: FILE*fp; Sauđótamtptinbnglnh: fopen(“textfile”,”w”); Khi vit nh vy s làm cho h điu hành bit là m m t tp tin tên là textfiletrongthmchinhànhđvitlêntptinđó(nh“w”).Tacóth 29 chotênđng dnđyđnumunm tptinthmcbt kì. Hàm fopen()trvmtcontrchđncutrúcFILEchotptinvàcontrnày đcctgitrongbinfp. Chui“w”đcgilàkiu,nócónghĩalàghi lêntptin.Cáckiumtptinlà: “r”,”rt”mđđc,tptinphicótrênđĩa “w”,”wt”mđghi,nutrênđĩađãcótptinthìnidungbghi đè,nuchacóthìtptinđctolp “a”,”at”mđnithêm,thôngtinđcghivàocuitptincũnu đãcótptinhaytomitptin “r+”,’’r+t”mđvađcvàghi,tptinphicótrênđĩa “rb”mmttptinđđctheokiunhphân.Tptinphicósn trênđĩa “r+b”mmttptinđđctheokiunhphân.Tptinphicósn trênđĩa “w+”,”w+t”mđvađcvàghi,nidungtptinđãcótrênđĩas bghiđèlên “wb”mđghitheokiunhphân,nutrênđĩađãcótptinthì nidungbghiđè,nuchacóthìtptinđctolp “a+”,”a+t” m đ đc và ni thêm, nu tp tin cha có thì nó s đctora “ab”mđđcvànithêmtheokiunhphân,nutptinchacó thìnósđctora c.Ghilêntptin:Khitptinđãđcm,tacóthghilêntptin t ngkítmtbngcáchdùnghàm: putc(ch,fp) Hàmputc()tngtcáchàmputch()vàputchar().Hàmputc()ghilêntp tincócutrúcFILEđcnđnhbibinfpnhnđckhimtptin. Tin trìnhghiđctinhànhchođnkhinhnenter. d.Đóngtptin:Khikhôngđcghinatacnđóngtptin.Câulnh đóngtptinlà: fclose(fp); Tabáochohthngbit làcnđóngtptinchbifp. e.Đctptin:Nutacóthghilêntptinthìtacũngcóthđct tptin.Tacóvídsau: Chngtrình32 #include<stdio.h> #include<conio.h> main() { FILE*fp; 30 intch; clrscr(); fp=fopen(textfile,r); while((ch=getc(fp))!=EOF) printf(%c,ch); fclose(fp); getch(); } f.Ktthúctptin:Skhácnhâuchyugiachngtrìnhđcvà ghilàchngtrìnhđcphiphânbi tđcđâulàkítEOF.Nókhông philàmtkítàmlàmtsnguyêndohđiuhànhgiti.Khihttp tintagpmãktthúctptinEOF(đnh nghĩatrongstdio.hbng1)và hàmfoef()chotrkháckhông.Ngitachn1làmmãktthúcvìnucha gpcuitptinthìsđcđcmtbytemàmãsnmtrong khong0255 .Nhvygiátr1khôngtrùngvibtkìkítnàonàođcđcttptin. Trongkhichngtrìnhđangđcvàhinthcáckítthìnótìmkimm giá tr1hayEOF.Khithygiátrnày,chngtrìnhsktthúc.Chúngta dùngmtbinnguyênctgimtkítđcđc,dođótacóthhiudu EOFnhlàmttrnguyêncó trlà1.Nudùngmtbinkiuchar,chúg tacóthdùngttccáckítt0 255đólàthp8.Dođónudùng binnguyên,tabođmrngchcó mtgiátr16bitlà1,đólàduEOF. g.Sphinphckhimtptin:Haichngtrìnhtatrìnhbàytrêncó mtlitimn.Nutptinđãđcchđnhkhông mđcthìchng trình không chy. Li này có th là do tp tin cha có (khiđc) hayđĩa khôngcònđch(khighi).Dođóvnđlàphikimtraxemtptincóm đchaykhông, nutptinkhôngmđcthìhàmfopen()trvtr0(0là NULLtrongstdio.h).KhinàyCcoiđâykhôngphilàđachhpl.Nh vytavitlichngtrìnhtrênnhsau: Chng trình33 #include<stdio.h> #include<stdlib.h> #include<conio.h> voidmain() { FILE*fp; intch; clrscr(); if((fp=fopen(file,r))==NULL) 31 { printf(Khongmoduoctaptin\n); getch(); exit(1); } while((ch=getc(fp))!=EOF) printf(%c,ch); fclose(fp); } h.Đmskít:Khnăngđcvàghitptintrêncscáckítcho phéptrinkhaimt sngdng.Chúngtaxemxétchngtrìnhđmskí tsau: Chngtrình34 #include<stdio.h> #include<conio.h> main(intargc,char*argv) { FILE*fp; charstring[8]; intcount=0; clrscr(); if(argc!=2) { printf(Formatc:\<tenchuongtrinh> <tentaptin>); getch(); exit(1); } if((fp=fopen(argv[1],r))==NULL) { printf(Khongmoduoctaptin\n); getch(); exit(1); } while(getc(fp)!=EOF) count++; fclose(fp); printf(Taptin%sco%dkitu,argv[1],count); getch(); 32 } i.Đmst:Tacóthsachngtrìnhtrênthànhchngtrìnhđm st. Chngtrình35 #include<stdio.h> #include<stdlib.h> #include<conio.h> main(intargc,char*argv[]) { FILE*fp; charch,string[81]; intcount=0; int white=1; clrscr(); if(argc!=2) { printf(Formatc:\<Tenchuongtrinh><tentaptin>\n); getch(); exit(1); } if((fp=fopen(argv[1],r))==NULL) { printf(Khongmoduoctaptin\n); getch(); exit(1); } while((ch=getc(fp))!=EOF) switch(ch) { case:/*nucódutr ng,dòngmihaytab*/ case\t: case\n:white++; break; default:if(white) { white=0; count++; } 33 } fclose(fp); printf(Taptin%sco%dtu,argv[1],count); getch(); return0; } k.Vàorachui:Đchayghichuitrêntptincũngtngtnhđc hayghitngkítriêngl.Taxétm tchngtrìnhghichui Chngtrình36 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> voidmain() { FILE*fp; charstring[8]; clrscr(); if((fp=fopen(a.txt,w))==NULL) { printf(Khongmoduoctaptin\n); getch(); exit(1); } while(strlen(gets(string))>0) { fputs(string,fp); fputs(\n,fp); } fclose(fp); } Trongchngtrìnhmichuiktthúcbngcáchgõentervàktthúc chngtrìnhbngcáchgõenterđudòngmi.Dofputs()khôngtđ ng thêmvàomãktthúcđchuyndòngminêntaphithêmvàotptinmã này.Chngtrìnhđcmtchuittptin: Chngtrình37: #include<stdio.h> 34 #include<string.h> #include<stdlib.h> #include<conio.h> voidmain() { FILE*fp; charstring[81]; clrscr(); if((fp=fopen(a.txt,r))==NULL) { printf(Khongmoduoctaptin\n); getch(); exit(1); } while(fgets(string,81,fp)!=NULL) printf(%s,string); fclose(fp); getch(); } Hàmfgets()nhn 3đis:đachniđtchui,chiudàitiđaca chui,vàcontrchtitptin. l.Vnđsangdòngmi:Trongchngtrìnhđmkíttathyskít đmđc bao gi cũng nh hns byte cótrong tp tinnàynhnđc bnglnhdircaDOS.Khitaghimttptinvănbnvàođĩa,Ctđng ghivàođĩachai mãCRvàLFkhigpmãsangdòngmi“\n”.Ngcli khiđctptintđĩa,cácmãCRvàLFđcthpthànhmãsangdòng mi.Chngtrìnhsauminhhoathêmvkĩthut vàorachui,nidung tngtlnhtypecaDOS Chngtrình38 #include<stdio.h> #include<stdlib.h> #include<conio.h> main(intargc,char*argv[]) { FILE*fp; charstring[81]; clrscr(); if(argc!=2) 35 { printf(Formatc:\<tenchuongtrinh><tentaptin>); getch(); exit(1); } if((fp=fopen(argv[1],r))==NULL) { printf(Khongmoduoctaptin\n); getch(); exit(1); } while(fgets(string,81,fp)!=NULL) printf(%s,string); fclose(fp); getch(); return0; } m.Cáctp tinchunvàmáyin:Trênđâytađãnóiđncáchthctip nhnmtcontrthamchiudnmttptintrênđĩacahàmfopen(),C đnhnghĩalitêchunc a5tptinchunnhsau: Tên Thitb in Thitbvàochun(bànphím) out Thitbrachun(mànhình) err Thitblichun(mànhình) aux Thitbphtrchun(cngnitip) prn Thitbinchun(máyin) Tacóthdùngcáctênnàyđtruycpđncácthitb.Chngtrìnhsau dùnghàmfgets(0vàfputs()đinnidungmttptinramáyin Chngtrình39 #include<stdio.h> #include<stdlib.h> #include<conio.h> main(intargc,char *argv[]) { FILE*fp1,*fp2; 36 [...]... do ta ghi , trình biên d ch s thông báo l i c th trong câu “ Loi ghi file : no such file directory” §6 VÀO RA M C H TH NG 1.Các t p tin tiêu và bi n chu n: Trong cách vào ra m c h th ng, ta ph i kh i t o b m r i t d li u vào ó tr c ghi hay c Vào ra m c h th ng có l i ch l ng mã ít h n vào ra chu n và t c s nhanh h n dùng các hàm c p 1 ta ph i c n các t p tin tiêu sau: io.h ch a các prototype c a các... qu n lí theo kích th c c a nó và khi c h t s byte ã ch ra trong kích th c t p tin thì d u hi u EOF s c 40 thông báo, d u hi u ó ng v i mã 1Ah(hay 26 h 10) Khi óng t p tin v n b n, mã 1A s ct ng chèn vào cu i t p tin làm d u hi u k t thúc t p tin (t ng ng mã Ctrl Z) Do v y n u b ng cáh nào ó ta chèn mã 1A vào m t v trí gi a t p tin, thì khi m t p tin theo ki u v n b n và c n mã này ch ng trình c s ng... %s%3d%8.3f\n ,name,code,height); } fclose(fp); getch(); } §3 KI U NH PHÂN VÀ KI U V N B N 39 1 Mã sang dòng theo hai ki u: Trong d ng v n b n, m t kí t chuy n dòng t ng ng v i 2 mã CR và LF khi ghi vào t p tin trên a Ng c l i khi c, t h p CR/LF trên a t ng ng v i kí t sang dòng m i Tuy nhiên n u m t p tin theo ki u nh phân thì 2 mã CR và LF là phân bi t nhau T ós kí t mà ch ng trình m c khác v i tr ng h... t p tin _open m t p tin ã t n t i close và _close óng t p tin chmod thay i thu c tính c a t p tin _chmode thay i thu c tính c a t p tin theo ki u DOS 51 perror thông báo l i (stdlib.h) write ghi m t dãy các byte read c m t dãy các byte lseek dùng di chuy n con tr v trí 3 c t p tin theo cách vào ra h th ng: Ta có ch ng trình a và hi n th lên màn hình theo cách vào ra h th ng c t p tin t Ch ng trình 3... M và c t b b t t p tin M t p tin ghi M t p tin ki u nh phân M t p tin ki u v n b n 6 Danh s c a t p tin: Trong vào ra chu n, con tr t p tin s nh n c ngay khi g i hàm fopen() còn trong nh p xu t b ng hàm c p 1 ta nh c giá tr nguyên g i là danh s c a t p tin ây là s gán cho m t t p tin c th tham chi u n t p tin này N u hàm open() cho ta giá tr 1 ngh a là danh s không úng và phát sinh l i c t p tin vào... ng 52 #define BUFFSIZE 512 char buff[BUFFSIZE] Nh ó ta c c d li u t a vào b m nên ch n là b i s c a 512 m buff V i DOS, kích th cb 5 M m t t p tin: C ng gi ng nh vào ra b ng hàm c p 2 , ta ph i m t p tin tr c khi c hay ghi b ng phát bi u: inhandle=open(argv[1],O_RDONLY | O_BINARY); Bi u th c này thi t l p s liên l c gi a t p tin và h i u hành Trong bi u th c ta c n m t h ng lag oflag là d u hi u cho... i ch b i ptr và f\dài c a ph n c n tìm trong b m là buflen Ch ng trình s truy n argv[2] cho cau Hàm này cho giá tr NULL khi không tìm th y kí t c n tìm Ng c l i nó s cho a ch c a kí t ã tìm th y trong b m Vi c so sánh các chu i cau và chu i ptr c ti n hành nh hàm memcmp trong câu l nh: if ((memcmp(ptr,cau,strlen(cau))==0) Hàm này c ng có 3 i s là: chu i thu nh t ptr, chu i thu hai cau và o dai can... ghi lên t p tin S_IREAD : ch cho phép c t t p tin S_IWRITE | S_IREAD : cho phép c và ghi lên t p tin dùng các tr này ph i khai báo #include sau khai báo #include Hàm write() có i t ng t nh read() Trong vòng l p while hàm read() báo s byte c c qua bi n bytes và hàm write() s bi t 57 s bytes c n ghi vào t p tin ích Trong ch ng trình ta dùng b kích th c khá l n ch ng trình ch y nhanh... t t p tin c th tham chi u n t p tin này N u hàm open() cho ta giá tr 1 ngh a là danh s không úng và phát sinh l i c t p tin vào b m: c t p tin vào b m ta dùng l nh: byte = read(inhandle , buff , BUFSIZE); Hàm này có 3 i s : danh s c a t p tin, a ch c a b m và s byte c c i c n c Giá tr c a hàm read() ch ra s byte ã c c 7 8 óng t p tin: óng t p tin ta dùng l nh close(inhandle); 9 Thông báo l i: Khi hàm... ki u v n b n và c n mã này ch ng trình c s ng ng h n vì chính lúc ó hàm c phát sinh giá tr 1 báo cho ch ng trình là ã k t thúc t p tin N u ã l u s vào t p tin theo d ng nh phân thì khi m t p tin c n ph i m theo d ng nh phân N u không s có m t s nào ó là 1A và vi c c t p tin theo ki u v n b n s k t thúc ngoài ý nh T ng t , v i t p tin m theo ki u nh phân mã 10 không c nhìn nh n là mã sang dòng m i vì . tinnàynhnđc bnglnhdircaDOS.Khitaghimttptinvănbnvàođĩa,Ctđng ghivàođĩachai mãCR và LFkhigpmãsangdòngmi“
”.Ngcli khiđctptintđĩa,cácmãCR và LFđcthpthànhmãsangdòng mi.Chngtrìnhsauminhhoathêmvkĩthut vàorachui,nidung tngtlnhtypecaDOS Chngtrình38 #include<stdio.h> #include<stdlib.h> #include<conio.h> main(intargc,char*argv[]) { FILE*fp; charstring[81]; clrscr(); if(argc!=2) . Trchtdliucóthđcghimilnmtkít,tngtnhcách làmviccaputchar() và getche()đđcdliut bànphím và hinthlên mànhình. Thhai,dliucóthnhpxuttheochuibngcácdùngcáchàm gets() và puts() Thba,dliucóthđcnhp và xuttheokhuôndngb ngcác hàmfprintf() và fscanf() . Thba,dliucóthđcnhp và xuttheokhuôndngb ngcác hàmfprintf() và fscanf() Tht,dliuđcđc và ghitheokhicóchiudàicđnhthng dùnglutrmnghaycutrúcbngcáchàmfread() và fwrite().Tómli: Cáchàmdùng chungchohaikiunhphân và vănbn fopen:dùngmtptin fclose:đóngtptin fclose:đóngttccáctptin fflush:dùnglàmschvùngđmcatptin flushall: dùnglàmschvùngđmcattctptin ferror:chobitcóli(kháckhông)haykhôngcóli(bng0)