使用libblkid查找分区的UUID

我正在查看libblkid ,并对文档感到困惑。 有人能给我提供一个如何使用这个库来find根分区的UUID的例子吗?

Solutions Collecting From Web of "使用libblkid查找分区的UUID"

它和手册看起来一样简单:创建一个探针结构,初始化它,询问一些信息,然后释放它。 你可以将前两步合并成一个。 这是一个工作程序:

#include <stdio.h> #include <stdlib.h> #include <err.h> #include <blkid/blkid.h> int main (int argc, char *argv[]) { blkid_probe pr; const char *uuid; if (argc != 2) { fprintf(stderr, "Usage: %s devname\n", argv[0]); exit(1); } pr = blkid_new_probe_from_filename(argv[1]); if (!pr) { err(2, "Failed to open %s", argv[1]); } blkid_do_probe(pr); blkid_probe_lookup_value(pr, "UUID", &uuid, NULL); printf("UUID=%s\n", uuid); blkid_free_probe(pr); return 0; } 

blkid_probe_lookup_valueuuid设置为指向属于pr结构的字符串,这就是为什么参数类型为const char * 。 如果你需要的话,你可以把它复制到你自己管理的char *中,但是只是传递给printf ,这是不需要的。 blkid_probe_lookup_value的第四个参数可以让你获得返回值的长度,以防你也需要。 blkid_do_probeblkid_do_safeprobeblkid_do_fullprobe之间存在一些细微的差别,但是在设备已知文件系统的情况下,您只需要将UUID从中blkid_do_probe则应从blkid_do_probe获取第一个结果。

首先,您需要查找以root用户身份登录的设备。 见人得意(3)。 一旦你知道设备,使用hobbs所描述的blkid_new_probe_from_filename。

 #include <stdio.h> #include <mntent.h> int main() { FILE* fstab = setmntent("/etc/mtab", "r"); struct mntent *e; const char *devname = NULL; while ((e = getmntent(fstab))) { if (strcmp("/", e->mnt_dir) == 0) { devname = e->mnt_fsname; break; } } printf("root devname is %s\n", devname); endmntent(fstab); return 0; }