static bool get_disk_serial(const char *disk_name, char* serial_no, int serial_no_len)
{ //参考的博客给了集中方法,我感觉ioctl贴近linux开发,最简单
int fd = open(disk_name, O_RDONLY);
if (fd < 0){
printf("open error: %s\n", disk_name);
return -1;
}
char type_str[32];
sprintf(type_str, "%%%ds", serial_no_len); // 做个格式控制,可以将长度加进去,有安全保障
struct hd_driveid drive = {0};
if (0 == ioctl(fd, HDIO_GET_IDENTITY, &drive)){
sscanf((const char*)(drive.serial_no), type_str, serial_no); // c 下的字符串解析
}
close(fd);
return 0;
}
int main(){
get_disk_serial("/dev/sda1", serial_no, 128);
printf("%s\n", serial_no);
return 0;
}
参考: