我在看 libblkid并对文档感到困惑。有人可以为我提供一个示例,说明如何使用此库找到根 Linux 分区的 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_value
将 uuid
设置为指向属于 pr
结构的字符串,这就是参数类型为 的原因常量字符 *
。如果需要,您可以将其复制到您自己管理的 char *
,但如果只是传递给 printf
,则不需要这样做。 blkid_probe_lookup_value
的第四个参数允许您获取返回值的长度,以备不时之需。 blkid_do_probe
、blkid_do_safeprobe
和 blkid_do_fullprobe
之间存在一些细微差别,但在设备具有已知文件系统并且您只想拉取的情况下从中提取 UUID,从 blkid_do_probe
中获取第一个结果应该可以。
关于linux - 使用 libblkid 查找分区的 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6748429/