我在看libblkid并对文档感到困惑.有人可以给我一个例子,说明如何使用这个库找到根linux分区的UUID吗?
hob*_*bbs 13
它就像手册看起来一样简单:你创建一个探针结构,初始化它,向它询问一些信息,然后释放它.您可以将前两个步骤合二为一.这是一个工作计划:
#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;
}
Run Code Online (Sandbox Code Playgroud)
blkid_probe_lookup_value设置uuid为指向属于pr结构的字符串,这就是参数类型的原因const char *.如果你需要,你可以将它复制到char *你自己管理的那个,但只是传递给printf那个,这是不需要的.第四个参数可以blkid_probe_lookup_value让你获得返回值的长度,以备你需要的时候.有一些细微的差异blkid_do_probe,blkid_do_safeprobe和blkid_do_fullprobe,但在情况下,装置有一个已知的文件系统,你只是想拉UUID出来的,以从第一个结果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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6907 次 |
| 最近记录: |