使用libblkid查找分区的UUID

Hig*_*ife 5 linux uuid

我在看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_safeprobeblkid_do_fullprobe,但在情况下,装置有一个已知的文件系统,你只是想拉UUID出来的,以从第一个结果blkid_do_probe应该做的.


Mic*_*jer 5

首先,您需要找到以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)