Pergunta

Estou tentando obter algumas informações (especificamente o tamanho do bloco) do dispositivo de bloco no linux, em C ++.É possível obter o tamanho do bloco de um dispositivo sem montá-lo e possivelmente sem olhar os arquivos dinâmicos (como aqueles em /sys), mas apenas com uma chamada de sistema.

Eu estava tentando com stat, mas ele retorna dados sobre o sistema de arquivos /dev se eu perguntar sobre /dev/sdb2.

Se for impossível com a chamada do sistema, onde devo procurar nos arquivos dinâmicos (também não fui capaz de localizá-lo).

Foi útil?

Solução

Você deseja usar ioctl , em particular BLKSSZGET.

Citando linux / fs.h:

#define BLKSSZGET  _IO(0x12,104)/* get block device sector size */

Exemplo não testado:

#include <sys/ioctl.h>
#include <linux/fs.h>

int fd = open("/dev/sda");
size_t blockSize;
int rc = ioctl(fd, BLKSSZGET, &blockSize);

Outras dicas

Acho que o valor ioctl deve ser unsigned long do que size_t (o mais recente está mais relacionado à memória), eu também o inicializaria com 0 (apenas no caso de BLKSSZGET retornar unsigned int em vez disso).

#include <sys/ioctl.h>
#include <linux/fs.h>

int fd = open("/dev/sda");
unsigned long blockSize = 0;
int rc = ioctl(fd, BLKSSZGET, &blockSize);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top