使用Windows时,我可以使用命令
获取(或多或少)唯一的HDD分区序列号GetVolumeInformation()
我的问题:是否有适用于Linux的类似内容?表示只有在某人格式化分区并且可以通过编程方式检索时才会更改的数字?
谢谢!
答案 0 :(得分:2)
您可以使用udev获取设备的序列号。 (你需要知道设备名称)
struct udev *context = udev_new();
struct udev_device *device = udev_device_new_from_syspath(context, "/sys/block/sda");
const char *id = udev_device_get_property_value(device, "ID_SERIAL");
// Cleanup
udev_device_unref(device);
udev_unref(context);
答案 1 :(得分:1)
在linux中,您可以使用blkid命令获取分区的UUID:
# blkid /dev/sda1
/dev/sda1: UUID="15677362-cef3-4a53-aca3-3bace1b0d92a" TYPE="ext4"
此信息存储在特定分区类型(如ext4,xfs)的格式中,并在重新格式化时更改。无格式分区没有可用信息。
如果你需要从代码中调用它,调用shell来运行这个命令并不是最漂亮的方法,但它可以工作:
#include <stdio.h>
int main(int argc,char ** argv) {
/* device you are looking for */
char device[]="/dev/sda1";
/* buffer to hold info */
char buffer[1024];
/* format into a single command to be run */
sprintf(buffer,"/sbin/blkid -o value %s",device);
/* run the command via popen */
FILE *f=popen(buffer,"r");
/* probably should check to make sure f!=null */
/* read the first line of output */
fgets(buffer,sizeof(buffer),f);
/* print the results (note, newline is included in string) */
fprintf(stdout,"uuid is %s",buffer);
}
答案 2 :(得分:1)
分区在linux中至少有三个身份:
cat /proc/partitions
) - 这不是唯一的序列号UUID
- 可以与blkid
一起找到,并存储在分区本身中。您也可以手动解析/dev/.blkid.tab
- 显而易见的格式。lsblk -o name,mountpoint,label,uuid NAME MOUNTPOINT LABEL UUID sda ├─sda1 / 315eaf50-adcc-4f0d-b767-f008f3f1c194 ├─sda2 └─sda5 [SWAP] 1ff31705-f488-44a4-ba5f-e2fe9eff4b96 sr0
其中,第二个最接近你想要的。要以编程方式阅读,请使用libblkid
。