intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài tập thực hành cơ bản- môn Hệ Điều Hành

Chia sẻ: Trần Công Chính | Ngày: | Loại File: DOC | Số trang:19

743
lượt xem
116
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo Bài tập thực hành cơ bản- môn Hệ Điều Hành

Chủ đề:
Lưu

Nội dung Text: Bài tập thực hành cơ bản- môn Hệ Điều Hành

  1. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 Bài tập thực hành cơ bản – môn Hệ Điều Hành Nhóm I :Các thao tác đọc /ghi nội dung file văn bản /nhị phân, khảo sát hình thức tổ chức d ữ li ệu trên file ( 2t TH ) Bài 1: Viết chương trình (VCT) nhập 1 số nguyên 2byte, 1 số nguyên 4byte, 1 chuỗi ký tự & lưu chúng vào 1 tập tin nh ị phân (theo đúng thứ tự trên). Sau đó dùng 1 công cụ xem nội dung tập tin dưới d ạng DUMP (dạng hexa) đ ể kh ảo sát giá tr ị t ừng byte của tập tin & tìm hiểu lý do vì sao giá trị các byte là như vậy. #include #include #include int LuuFileNhiPhan(char *FileName,int n2,long n4,char *S) { FILE *f=fopen(FileName,"wb"); if(f==NULL) return 0; fwrite(&n2,sizeof(n2),1,f); fwrite(&n4,sizeof(n4),1,f); fwrite(S,strlen(S),1,f); fclose(f); return 1; } void main() { clrscr(); int n2; long n4; char S[256]; printf("\n Moi ban nhap n2 : "); scanf("%d",&n2); printf("\n Moi ban nhap n4 : "); scanf("%d",&n4); fflush(stdin); printf("\n Moi ban nhap chuoi S : "); gets(S); if(LuuFileNhiPhan("D:/Bai1.DAT",n2,n4,S)==0) printf("\nLoi"); else printf("\n Thanh cong"); } Bài 2: VCT nhập 1 số nguyên, 1 số thực, 1 chuỗi ký tự & lưu chúng vào 1 tập tin văn b ản (trên 3 dòng khác nhau). Sau đó dùng 1 công cụ xem nội dung tập tin dưới dạng DUMP (dạng hexa) để khảo sát giá trị từng byte của tập tin & tìm hi ểu lý do vì sao giá trị các byte là như vậy. #include #include #include int LuuFileVB(char *FileName, int n,float x, char *S) { FILE *f=fopen(FileName,"wt"); if(f==NULL) return 0; fprintf(f,"%d\n",n); fprintf(f,"%f\n",x); fprintf(f,"%s\n",S); fclose(f);return 1; } void main() { clrscr(); int n; float x; char S[256]; printf("\n Moi nhap mot so nguyen : "); scanf("%d",&n); printf("\n Moi nhap mot so thuc : "); scanf("%f",&x); fflush(stdin); //Rua bo dem ban phim printf("\n Moi nhap mot chuoi S : "); gets(S); if(LuuFileVB("D:/Bai2.txt",n,x,S)==0) printf("\nLoi"); else printf("\nThanh cong"); getch(); } Trang 1
  2. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 Bài 3:VCT mã hóa nội dung của 1 tập tin & chương trình giải mã tương ứng. Bài 3 A:(Mã hóa) #include #include #include int DocFileVB(char *FileName,char *S) { FILE *f=fopen(FileName,"rt"); if(f==NULL) return 0; char S1[256]; S[0]=0; while(1) { char *P=fgets(S1,256,f); if(P==NULL) break; strcat(S,S1); } fclose(f);return 1; } int GhiFileVB(char *FileName,char *S) { FILE *f=fopen(FileName,"wt"); if(f==NULL) return 0; fprintf(f,"%s",S); fclose(f);return 1; } void MaHoa(char *P, char *C) { int l=strlen(P); for(int i=0;i
  3. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 } int GhiFileVB(char *FileName,char *S) { FILE *f=fopen(FileName,"wt"); if(f==NULL) return 0; fprintf(f,"%s",S); fclose(f); return 1; } void GiaiMa(char *C, char *P) { int l=strlen(C); for(int i=0;i
  4. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 } void TaoThuMuc(char *DIRNAME) { int stat; stat = mkdir(DIRNAME); if (!stat) printf("Directory created\n"); else { printf("Unable to create directory\n"); exit(1); } } void ChuyenDoiThuMuc(char *DIRNAME) { if (chdir("\\")) //chuyen ve thu muc goc { perror("chdir()"); exit(1); } if (chdir(DIRNAME)) { perror("chdir()"); exit(1); } } void XoaThuMuc(char *DIRNAME) { int stat; stat = rmdir(DIRNAME); if (!stat) printf("\nDirectory deleted\n"); else { perror("\nUnable to delete directory\n"); exit(1); } } void XoaTapTin(char *file) { if (remove(file) == 0) printf("Removed %s.\n",file); else perror("\nLoi"); } void DoiTenTapTin(char oldname[],char newname[]) { if (rename(oldname, newname) == 0) printf("Renamed %s to %s.\n", oldname, newname); else perror("rename"); } int DocFileVB(char *FileName,char *S) { FILE *f=fopen(FileName,"rt"); if(f==NULL) return 0; char S1[256]; S[0]=0; while(1) { char *P=fgets(S1,256,f); if(P==NULL) break; strcat(S,S1); } fclose(f);return 1; } void XemNoiDungTapTin(char *FileName) { char S[256]; if(DocFileVB(FileName,S)==0) printf("\n Loi"); Trang 4
  5. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 else printf("\n%s\n",S); } void GiaLapDOS(char M[][50]) { int vt=TimVT_X(CacLenh,6,M[0]); char DIRNAME[256]; switch(vt) { case 0: strcpy(DIRNAME,Curdir); strcat(DIRNAME,M[1]); TaoThuMuc(DIRNAME); break; case 1: strcpy(DIRNAME,M[1]); ChuyenDoiThuMuc(DIRNAME); break; case 2: strcpy(DIRNAME,Curdir); strcat(DIRNAME,M[1]); XoaThuMuc(DIRNAME); break; case 3: strcpy(DIRNAME,M[1]); XoaTapTin(DIRNAME); break; case 4: DoiTenTapTin(M[1],M[2]); break; case 5: XemNoiDungTapTin(M[1]); break; default:printf("\n Chua co lenh nay "); } } char *Current_directory(char *path) { strcpy(path,"D:\\"); path[0]='A' + getdisk(); getcurdir(0,path+3); return (path); } void main() { clrscr(); char MangLenh[6][50]; char ChuoiLenh[256]; while(1) { Curdir[0]=0; Current_directory(Curdir); fflush(stdin);//rua bo dem ban phim printf("%s>",Curdir); gets(ChuoiLenh); strupr(ChuoiLenh); int dem=TachChuoi(ChuoiLenh,MangLenh); if(strcmp(MangLenh[0],"EXIT")==0) break; if(dem >0) GiaLapDOS(MangLenh); } } Bài 2: VCT thực hiện công việc hiển thị mã ASCII & mã SCAN của 1 phím nhập vào, chương trình kết thúc khi nhấn phím 0 bên dãy NumPad. #include #include #include #include void main() { unsigned char result; int port=0x80; getch(); result=inportb(port); printf("Ky tu read from port 0x%X=0x%X la %c\n",port,result,result); getch(); Trang 5
  6. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 } Bài 2(Sử dụng lập trình ngắt) #include #include #include #include void InPort_Byte() { unsigned char result; int port = 0x80; getch(); result = inportb(port); printf("Ky tu read from port 0x%X = 0x%X la %c\n",port, result,result); } int Get_Ascii_Code() { union REGS r; //b1: khai bao bien thanh ghi r.h.ah=0; //b2: cho biet chuc nang cua ham int86(0x16,&r,&r); //b3: goi ham ngat ban phim return r.h.al; //b4: tra ve ket qua } int Get_Scan_Code() { union REGS r; r.h.ah=0; int86(0x16,&r,&r); return r.h.ah; } unsigned Get_Code() { union REGS r; r.h.ah=0; int86(0x16,&r,&r); return r.x.ax; } void main() { unsigned kq=Get_Code(); printf("\nKet qua ascii=0x%X cua phim %c", kq & 0x00FF , kq & 0x00FF ); printf("\nKet qua scan=0x%X",( kq & 0xFF00 ) >> 8 ); getch(); } Bài 3: Giả lập các lệnh MD, DEL, TYPE với các phần công việc chính được thực hiện bằng cách gọi ngắt. #include #include #include unsigned TaoThuMuc(char *DirName) { union REGS inregs,outregs; //b1: khai báo các thanh ghi struct SREGS segregs; inregs.h.ah=0x39; // Cho biet chac nang cua hàm inregs.x.dx=FP_OFF(DirName);//b3: Truy?n vào d?a ch? thu m?c segregs.ds=FP_SEG(DirName); int86x(0x21,&inregs,&outregs,&segregs); // b4: G?i ng?t return outregs.x.ax; // b5: Tr? v? k?t qu? } void main() { clrscr(); unsigned kq=TaoThuMuc("D:/THUMUC1"); if(kq!=0) printf("\n Thanh cong"); else printf("\n That bai"); getch(); } Trang 6
  7. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 Nhóm III: Thao tác với bộ nhớ chính ( 1t TH ) Bài 1: VCT cho người dùng nhập vào địa chỉ logic của 1 ô nhớ trong bộ nhớ chính và hiển thị ra màn hình (d ưới d ạng Hex) nội dung của 100h Byte bắt đầu tại ô nhớ đó. #include #include #include void main() { unsigned char seg,off; printf("\n Moi nhap dia chi seg= "); scanf("%d",&seg); printf("\n Moi nhap dia chi off= "); scanf("%d",&off); unsigned *p=(unsigned *)MK_FP(seg,off); for(int i=0;i
  8. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 { int Sector_LG; unsigned char Buf[512]; printf("\n Moi nhap dia chi sector logic= "); scanf("%d",&Sector_LG); if(DocMotSector(sector_LG,Buf)==1) XuatNoiDungMotSector(Buf); else printf("\n That bai"); getch(); } Bài 2: Tương tự như bài trên nhưng địa chỉ sector nhập vào là địa chỉ vật lý #include #include #include #include #include int DocMotSectorVL(int sector,int track,int head,unsigned char *buf) { int kq=biosdisk( 2 , 0 ,head,track,sector,1,&buf); //2: doc ; 3:ghi kq=kq&0x00; if(kq==0)return 1; perror("\n Loi");return 0; } void XuatNoiDungMotSector(unsigned char *buf) { for(int i=0;i
  9. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 printf("\n Moi nhap track thu= "); scanf("%d",&TrackNo); printf("\n Moi nhap Side thu= "); scanf("%d",&SideNo); } void TinhSectorLG()//Ham tinh SectorLG tu dc VL da nhap(SecNo,TrackNo,SideNo) { SectorLG=(TrackNo*SectorPerTrack*Sides)+(SideNo*SectorPerTrack)+(SecNo-1); } void TinhSectorVL() { int tam=SectorLG/SectorPerTrack; TrackNo=tam/Sides; SideNo=tam%Sides; SecNo=SectorLG%SectorPerTrack+1; } void XuatSectorLG() { printf("\n\t Sector logic= %d",SectorLG); } void XuatSectorVL() { printf("\n\t Sector thu= %d",SecNo); printf("\n\t Track thu= %d",TrackNo); printf("\n\t Side thu= %d",SideNo); } }; void main() { clrscr(); cSector objSec; objSec.NhapThongSoVL(); objSec.NhapSectorVL(); objSec.TinhSectorLG(); objSec.XuatSectorLG(); objSec.NhapSectorLG(); objSec.TinhSectorVL(); objSec.XuatSectorVL(); getch(); } BÀI 4: VCT nhập vào địa chỉ logic hoặc vật lý (tùy theo sự lựa chọn của người dùng) của 1 sector, đọc và lưu nội dung sector đó vào 1 file. Và CT thực hiện công việc tương ứng ngược lại (đọc nội dung file & lưu vào sector). BÀI 4A: (Nhập vào địa chỉ của 1 Sector,đọc và ghi nội dung Sector đó vào 1 file) Bài 4A1: (Nhập địa chỉ logic) #include #include #include #include #include class cSector { int SectorLG; unsigned char buf[512]; public: void NhapSectorLG() { do { printf("\n Moi nhap Sector logic thu= "); scanf("%d",&SectorLG); if(SectorLG2879) printf("\n Ban nhap sai...."); }while(SectorLG2879) ; } int DocMotSectorLG() { if(absread( 0 ,1,SectorLG,&buf)!=0) // 0:O dia A; { perror("Loi"); return 0; } return 1; } void XuatNoiDung() { for(int i=0;i
  10. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 int LuuFileVB(char *FileName) { FILE *f=fopen(FileName,"wt"); if(f==NULL) return 0; for(int i=0;i
  11. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 #include #include #include class cSector { int SideNo,TrackNo,SecNo; unsigned char S[512]; public: int DocFileVB(char *FileName) { FILE *f=fopen(FileName,"rt"); if(f==NULL) return 0; for(int i=0;i
  12. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 } }; void main() { clrscr(); cSector objSec; objSec.DocFileVB("e:/test1.txt"); objSec.GhiMotSectorLG(); objSec.XuatNoiDung(); getch(); } Trang 12
  13. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 Nhóm V: thao tác với các thông số /thông tin quan trọng của volume ( 3t TH ) Bài 1: Thực hiện thao tác tạo volume ảo (dùng RAM hoặc 1 file để lưu nội dung volume - có th ể dùng 1 trong các công c ụ Loaddrv.com – RamDrive.sys, RAMDisk for Windows 9x, RAMDisk for Windows 2000, …) Bài 2: Dùng công cụ xem nội dung sector (chẳng hạn DiskEdit, WinHex, HexWorkShop, …) đ ể xem nội dung Boot sector của đĩa mềm, đĩa ảo hoặc đĩa cứng dưới dạng Hex và xác định các tham số của đĩa. Bài 3: VCT đọc và hiển thị ra màn hình các tham số của đĩa. #include #include #include #include #include int DocMotSector(int Sector_LG,unsigned char buf[] ) { if(absread(0,1,Sector_LG,buf)!=0) { perror("Disk problem"); return 0; } return 1; } int XuatBangBootSector(unsigned char *buf) { printf("\n Ten cong ty= "); for(int i=0;i
  14. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 public: cSector() { SectorLG=0; } // BootSector nam o vi tri 0 int DocBootSector() { if(absread(0,1,SectorLG,&buf)!=0) { perror("Disk problem"); return 0; } return 1; } void XuatNoiDungBootSector() { printf("\n Ten cong ty(version)= "); for(int i=0;i
  15. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 XuatChuoi(Buf+(i*32),8); if(Buf[i*32+11]==0x20) { printf("."); XuatChuoi(Buf+(i*32)+8,3); } } } void main() { clrscr(); DocRD(); XuatNoiDungRD(); getch(); } BÀI 2: VCT đọc RDET & FAT của đĩa mềm & lưu vào 2 file tương ứng. Bài 2A: Đọc RDET #include #include #include #include int Sector=19; unsigned char *Buf=new unsigned char[512*14]; int DocRD() { if(absread(0,14,Sector,Buf)!=0) { perror("Loi");return 0; } return 1; } int LuuFileVanBan(char *FileName) { FILE *f=fopen(FileName,"wt"); if(f==NULL) return 0; for(int i=0;i
  16. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 #include #include #include int Sector=1; unsigned char *Buf=new unsigned char[512*9]; int DocFAT() { if(absread(0,9,Sector,Buf)!=0) { perror("Loi");return 0; } return 1; } int GetValueFat(int cluster) { int i=cluster*3/2; int value=(Buf[i+1]4; return value; } void HienThiTrangThai() { for(int i=2;i
  17. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 { for(int i=0;i
  18. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 unsigned char *Buf=new unsigned char[512*9]; int DocFAT() { if(absread(0,9,Sector,Buf)!=0) { perror("\n Loi"); return 0; } return 1; } unsigned GetValueFat(int cluster) { int i=cluster *3/2; unsigned value=(Buf[i+1]4; return value; } int ChuoiCluster(int cluster) { int dem=0; do { int value=GetValueFat(cluster); if (value - cluster > 1) dem++; cluster=value; }while(cluster!=0xFFF); return dem; } void main() { DocFAT(); int cluster=2; int kq=ChuoiCluster(cluster); if(kq==1) printf("\n Khong phan manh"); else printf("\n Phan lam %d manh",kq); getch(); } Bài 2: VCT truy xuất đĩa ở mức trực tiếp (đọc/ ghi sector) thực hiện công việc hiển thị nội dung của một tập tin văn bản ở thư mục gốc. #include #include #include #include #include int SectorRD=19; unsigned char *BufRD=new unsigned char [512*14]; int SectorFAT=1; unsigned char *BufFAT= new unsigned char[512*9]; unsigned char *Buf= new unsigned char[512]; int DocRD() { if(absread(0,14,SectorRD,BufRD)!=0) { perror("Loi"); return 0; } return 1; } void XuatChuoi(unsigned char A[],int n) { for(int i=0;i
  19. Bài tập thực hành cơ bản- môn Hệ Điều Hành năm 2009 GVHD: Phạm Đức Thành SVTH:Trần Thị Thanh Trâm_Lớp 06CT3 continue; if(BufRD[i*32+11]==15) // long filename LFN continue; if(BufRD[i*32+11]==0x20) //filename { if(strnicmp(BufRD+(i*32),filename,strlen(filename)-4)==0) return ((BufRD[i*32+27]
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2