资源描述:
《操作系统实验(五)获取磁盘基本信息.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、获取磁盘基本信息姓名:蒙吉学号:实验名称:获取磁盘基本信息实验目的:1)了解磁盘的物理组织。2)熟悉WINDOWS系统如何查看磁盘相关信息。3)掌握Windows系统提供的有关对磁盘操作API。实验准备知识:1)磁盘基本物理结构说明:Cylinder:磁盘的柱面数;TracksPerCylinder:每个柱面的磁道数;BytesPerSector:每个扇区的字节数;MediaType:介质类型,如3.5英寸,1.44MB软盘;SectorsPerTrack:每个磁道的扇区数。2)相关函数:文件创建函数CreateFile();
2、获取磁盘的基本信息函数DeviceIoControl().实验内容:编写一个函数根据给出的驱动器号读取磁盘基本信息,包括磁盘的大小、该磁盘包括多少个扇区,该磁盘有多少个柱面、每个磁盘的磁道数、每个磁道的扇区数、每个扇区包含的字节数。实验要求:了解MSDNLibraryVisualStudio6.0中提供的磁盘主要数据结构DISK_GEOMETRY中每个成员的含义,深入理解操作系统将设备当作文件处理的特性,理解函数GreateFile()及DeviceloCotrol()中每个参数的实际意义并能在本实验中正确使用。参考源代码:/
3、/Diskformation_Get.cpp:Definestheentrypointfortheconsoleapplication.#include"stdafx.h"#include"winioctl.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifDISK_GEOMETRYdisk_info;HANDLEGetDiskInformation(chardrivername);/////////////
4、/////////////////////////////////TheoneandonlyapplicationobjectCWinApptheApp;usingnamespacestd;int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;HANDLEHandle;Handle=GetDiskInformation('A');return(nRetCode);}HANDLEGetDiskInformation(chardrivername){chardevic
5、e[]="\\.\:";device[4]=drivername;HANDLEFloopyDisk;DWORDReturnSize;DWORDSector;doubleDiskSize;FloopyDisk=CreateFile(device,GENERIC_READ
6、GENERIC_WRITE,FILE_SHARE_READ
7、FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS
8、FILE_FLAG_NO_BUFFERING,NULL);if(Floopy
9、Disk==INVALID_HANDLE_VALUE)printf("INVALID_HANDLE_VALUE!");if(GetLastError()==ERROR_ALREADY_EXISTS)printf("CannotOpenDisk!%d",GetLastError());if(!DeviceIoControl(FloopyDisk,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&disk_info,50,&ReturnSize,(LPOVERLAPPED)NULL))printf
10、("OpenDiskError!%d",GetLastError());printf("DiskInformation:");printf("tBytesPerSector:%d",disk_info.BytesPerSector);printf("tSectorPerTrack:%d",disk_info.SectorsPerTrack);printf("tTracksPerCylinder:%d",disk_info.TracksPerCylinder);printf("tCylinder:%d
11、",disk_info.Cylinders);Sector=disk_info.Cylinders.QuadPart*disk_info.TracksPerCylinder*disk_info.SectorsPerTrack;printf("tThereis%dSect