Linux下获取存储介质扇区大小
来源:互联网 发布:如何用c语言开发软件 编辑:程序博客网 时间:2024/05/20 01:37
通过proc文件系统获得,在proc文件系统中有一个名为partitions的文件。这个文件中包含本地磁盘的硬盘及分区信 息。根据Linux下设备命名规则,如果设备名的最后一个字符是数字就应该是分区,否则就是硬盘。 根据这个文件,还可以知道硬盘设备名称以及每个硬盘中分区的数量和每个分区的设备名称。
获取硬盘扇区大小信息:
/* get size in bytes */
intblkdev_get_size(int fd, unsigned long long *bytes)
{
unsigned long size;
int ver = get_linux_version();
/* kernels 2.4.15-2.4.17, had a broken BLKGETSIZE64 */
if (ver >= KERNEL_VERSION (2,6,0) ||
(ver >= KERNEL_VERSION (2,4,18) && ver < KERNEL_VERSION (2,5,0))) {
if (ioctl(fd, BLKGETSIZE64, bytes) >= 0)
return 0;
}
if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
*bytes = ((unsigned long long)size << 9);
return 0;
}
return -1;
}
根据ATA8-ACS文档规范,我们的操作系统都会有一个ATA IDENTIFY DEVICE的数据结构来说明一个磁盘设备的,无论linux还是windows都会有一个,在这里我以linux为例说明,windows也一样可用API获取。
在linux下:
unsigned short word106 = 0;
struct hd_driveid id;
int fd = open(diskname, O_RDONLY);
ioctl(fd, HDIO_GET_IDENTITY, &id);
word106 = id.words104_125[2];
获取这个结构的第106个字(注意是字,不是字节)。而这个字就定义了磁盘扇区的大小,我们来看下这个字是怎么定义扇区大小的。
bit 15 固定为0。
bit 14 固定为1。
bit 13 如果为1就说明一个逻辑扇区有多个物理扇区组成。
bit 12 如果为1就说明设备被格式化成一个逻辑扇区的大小超过256个字。
bit 11-4 为保留。
bit 3-0 如果bit 13为1的话,这三个比特位就用来表示逻辑扇区的大小。
我们重点看下这前4个比特位是怎么表示扇区大小的。我用个公式来表示,sector_size = 2^x * 物理扇区大小(即512b)。
即是说逻辑扇区大小是2的x次方个物理扇区的大小,即是:扇区大小 = 2^x * 512。x就是这个字的前4位的值。
举个例来说,如果是个大扇区,扇区大小为4K即是4096个字节,那么在这个字中的表示为:
bit 13 = 1
bit 3-0 = 0011
二进制数0011 = 十进制数3,那么2的三次方为8,那么扇区大小是8*512,即4096 bytes。
- Linux下获取存储介质扇区大小
- Linux下获取存储介质扇区大小
- windows下获取柱面、扇区数,扇区大小
- linux 下得到磁盘物理扇区大小
- Linux下的文件系统分类(以存储介质)
- linux下C获取文件的大小
- linux下C获取文件的大小
- linux下C获取文件的大小
- linux下C获取文件的大小
- Linux下C获取文件的大小
- linux下C获取文件的大小
- linux下C获取文件的大小
- linux下C获取文件的大小 .
- Linux下获取块设备大小
- Linux下获取硬盘空间的大小
- linux下C获取文件的大小
- Linux下获取块设备大小
- linux下C获取文件的大小
- 黑马程序员--异常
- 母函数详解
- 配置python问题实践中的解决方法集锦(本问题集锦将持续更新,欢迎提出问题并在文下交流)
- eclipse CDT禁止每次调试新工程都停在main函数的方法
- ios之Notification
- Linux下获取存储介质扇区大小
- 幸福能否递归
- HDU1026 Ignatius and the Princess I
- OC学习那点事:构造方法和description方法
- easymock源码学习笔记(3)--录制
- 25个CSS3 渐变和动画效果教程
- 系统安装の网刻
- Samba共享问题
- HDU 3694 Fermat Point in Quadrangle(四边形的费马点)