打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
获得存储设备的几何数据CHS
int CDiskBase::GetDiskGeometryInfo(U32 dev_type, U32 disk_id)
{
int iFd = -1, ret = -1 ;
tDISK_INFO *pt = GetDiskInfoPoint(dev_type, disk_id);
if (pt == NULL)
return -1;

iFd = open(pt->disk_name, O_RDWR);
if (iFd == -1)
{
pt->disk_status = DISK_STATUS_OPEN_DEV_ERROR ;
LOG_DEBUG_MSG_ERROR("", "GetDisk GeometryInfo, open disk dev (%s) error !\n", pt->disk_name ) ;
return DISK_STATUS_OPEN_DEV_ERROR;
}

U64 total_byte_size = 0;    ///<磁盘的总扇区数, 每个扇区大小512BYTES
ret = ioctl(iFd, BLKGETSIZE64, &total_byte_size);
if (ret != -1)
{
if (total_byte_size == 0)
{
close(iFd);
pt->disk_status = DISK_STATUS_GEOMETRY_INFO_ERROR;
LOG_DEBUG_MSG_ERROR("", "total_sectors == 0, error.\n");
return DISK_STATUS_GEOMETRY_INFO_ERROR;
}
else
{
   pt->total_byte_size = total_byte_size;
   pt->total_sectors = total_byte_size / SECTOR_SIZE;
}
}
else
{
close(iFd);
pt->disk_status = DISK_STATUS_IOCTL_ERROR;
LOG_DEBUG_MSG_ERROR("", "disk dev (%s) IOCTL BLKGETSIZE64 error .\n", pt->disk_name);
return DISK_STATUS_IOCTL_ERROR;
}

struct hd_geometry geometry;
ret = ioctl(iFd, HDIO_GETGEO, &geometry);
if ( ret != -1 )
{
if (geometry.sectors == 0)
{
close(iFd);
pt->disk_status = DISK_STATUS_GEOMETRY_INFO_ERROR;
LOG_DEBUG_MSG_ERROR("", "geometry.sectors == 0, error.\n" );
return DISK_STATUS_GEOMETRY_INFO_ERROR;
}
else
{
   pt->heads_of_disk = geometry.heads;
   pt->sectors_per_cylinder = geometry.sectors;
   pt->cylinders_of_disk = geometry.cylinders;
}
}
else
{
close(iFd);
pt->disk_status = DISK_STATUS_IOCTL_ERROR;
LOG_DEBUG_MSG_ERROR("", "IOCTL HDIO_GETGEO error.\n" );
return DISK_STATUS_IOCTL_ERROR;
}
close(iFd);
pt->disk_status = DISK_STATUS_OK;
return DISK_STATUS_OK;
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
FatFs文件系统移植的文章
实战DeviceIoControl 之二:获取软盘/硬盘/光盘的参数
IOCTL_DISK_GET_DRIVE
【已解决】每扇区4096字节的SPI Flash能用FatFS吗? 第2页 (amoBBS 阿莫电子...
Linux块设备驱动程序原理
led灯驱动测试
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服