Estou respondendo a minha própria pergunta. Consegui fazer o que queria usando algumas funções de libblkid
e a função mkstemp
. Esta função cria e abre um arquivo temporário (na verdade, na memória). Precisamos escrever o bloco nesse arquivo e, em seguida, chamar a função blkid_probe_set_device
com o descritor de arquivo desse arquivo. Parece que a biblioteca está feliz em trabalhar com esse arquivo artificial. O código está abaixo (estou omitindo todas as verificações de erro para simplificar):
char block[4096];
...
char filename[] = "/tmp/fileXXXXXX";
const int fd = mkstemp(filename);
write(fd, block, sizeof(block));
...
blkid_probe pr = blkid_new_probe();
blkid_probe_set_device(pr, fd, 0, 0);
...
... (analysis using various libblkid functions)
...
close(fd);
unlink(filename);