A biblioteca libblkid: alguma maneira de usá-lo com blocos na memória principal?

1

Eu sei como usar a biblioteca libblkid para analisar os dispositivos de bloco existentes. Eu gostaria de usá-lo para analisar uma extensão de memória antes de eu gravá-lo no dispositivo de bloco. Algo assim:

char block[4096];
... writing into the block 
blkid_probe pr = blkid_new_probe_from_address(block);
... calling usual libblkid function on the pr

É claro que o blkid_new_probe_from_address não existe - será que é possível criar esse tipo de função usando as funções libblkid existentes e sem entrar em contato com essa biblioteca?

Ou pode haver algum outro kit de ferramentas para conseguir isso?

    
por HEKTO 10.04.2014 / 23:59

1 resposta

0

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);
    
por 09.05.2014 / 19:11