操作系统实验(五)获取磁盘基本信息

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1获取磁盘基本信息姓名:蒙吉学号:20072411603实验名称:获取磁盘基本信息实验目的:1)了解磁盘的物理组织。2)熟悉WINDOWS系统如何查看磁盘相关信息。3)掌握Windows系统提供的有关对磁盘操作API。实验准备知识:1)磁盘基本物理结构说明:Cylinder:磁盘的柱面数;TracksPerCylinder:每个柱面的磁道数;BytesPerSector:每个扇区的字节数;MediaType:介质类型,如3.5英寸,1.44MB软盘;SectorsPerTrack:每个磁道的扇区数。2)相关函数:文件创建函数CreateFile();获取磁盘的基本信息函数DeviceIoControl().实验内容:编写一个函数根据给出的驱动器号读取磁盘基本信息,包括磁盘的大小、该磁盘包括多少个扇区,该磁盘有多少个柱面、每个磁盘的磁道数、每个磁道的扇区数、每个扇区包含的字节数。实验要求:了解MSDNLibraryVisualStudio6.0中提供的磁盘主要数据结构DISK_GEOMETRY中每个成员的含义,深入理解操作系统将设备当作文件处理的特性,理解函数GreateFile()及DeviceloCotrol()中每个参数的实际意义并能在本实验中正确使用。参考源代码://Diskformation_Get.cpp:Definestheentrypointfortheconsoleapplication.#includestdafx.h#includewinioctl.h#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifDISK_GEOMETRYdisk_info;HANDLEGetDiskInformation(chardrivername);//////////////////////////////////////////////TheoneandonlyapplicationobjectCWinApptheApp;usingnamespacestd;int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;HANDLEHandle;Handle=GetDiskInformation('A');return(nRetCode);2}HANDLEGetDiskInformation(chardrivername){chardevice[]=\\\\.\\:;device[4]=drivername;HANDLEFloopyDisk;DWORDReturnSize;DWORDSector;doubleDiskSize;FloopyDisk=CreateFile(device,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS|FILE_FLAG_NO_BUFFERING,NULL);if(FloopyDisk==INVALID_HANDLE_VALUE)printf(INVALID_HANDLE_VALUE!\n);if(GetLastError()==ERROR_ALREADY_EXISTS)printf(CannotOpenDisk!%d\n,GetLastError());if(!DeviceIoControl(FloopyDisk,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&disk_info,50,&ReturnSize,(LPOVERLAPPED)NULL))printf(OpenDiskError!%d\n,GetLastError());printf(DiskInformation:\n);printf(\tBytesPerSector:%d\n,disk_info.BytesPerSector);printf(\tSectorPerTrack:%d\n,disk_info.SectorsPerTrack);printf(\tTracksPerCylinder:%d\n,disk_info.TracksPerCylinder);printf(\tCylinder:%d\n,disk_info.Cylinders);Sector=disk_info.Cylinders.QuadPart*disk_info.TracksPerCylinder*disk_info.SectorsPerTrack;printf(\tThereis%dSectors!\n,Sector);DiskSize=Sector*disk_info.BytesPerSector;printf(\tSizeofDisk:%4.2fKB\n,(DiskSize)/(1024*1024));returnFloopyDisk;}实验步骤:(1)新建一个工程文件后按照实验一之三的操作方法到源代码中的“操作3系统实验五.Cpp”。(2)按照参考代码对源代码进行修改然后运行。4(3)运行程序,查看运行结果。实验总结:(1)在提供的参考代码的头文件中除了#includestdafx.h、#include5操作系统实验五.h之外缺少#includewinioctl.h头文件,需要用户手动输入此头文件。(2)在参考代码中需要获取的磁盘设为A盘,但因为A盘是软盘驱动,而且软盘合是空的所以运行结果会出现全是0的情况,要把需要获取信息的盘修改成“C/D/E/F盘”中的任何一个才能获取磁盘信息。(3)初步了解了操作系统中获取磁盘信息程序代码的基本结构和需要注意的一些细节。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功