Sto lavorando su un programma di I/O ad alte prestazioni e sto cercando di trovare il modo migliore per determinare il fisico (non la logica e ) Byte dimensione dei blocchi del disco di un dispositivo con C++. La mia ricerca finora mi ha portato al seguente frammento di codice:dimensione fisica del blocco del disco su POSIX tramite C/C++
#include <iostream>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char ** argv)
{
// file information including block size of the device
struct stat info;
// device to get block size from
char * device = "/mnt/hdb1";
if (stat(device, &info))
{
printf("stat() error");
strerror(errno);
exit(1);
}
printf("Prefered block size for '%s' is %i byte\n", device, info.st_blksize);
return 0;
}
Le pagine uomo dice quanto segue riguardo st_blksize
:
Il campo st_blksize dà la dimensione del blocco "preferito" per un efficiente file system I/O. (Scrittura di un file in blocchi più piccoli può causare un inefficiente lettura-modifica-riscrittura.)
, ma non parlare se st_blksize
è la logica o la dimensione del blocco del disco fisico.
Quindi, è st_blksize
il fisico dimensioni del blocco del disco, e se è così, allora questo è il modo più POS portatile OS di rilevare la dimensione del blocco del disco fisico.
Non penso sia possibile tramite POSIX. –
Mi chiedo cosa 'st_blksize' sia per'/dev/null'. E mi chiedo se sarebbe la dimensione * fisica * o quella * logica *. –
@DanMoulding '/ dev/null' è un dispositivo di carattere, non un dispositivo a blocchi. – Petesh