pracuję nad programem I/O wysokiej wydajności i próbuję znaleźć najlepszy sposób, aby określić fizyczne (a nie logiczną) bajt rozmiar bloków dysków urządzenia z C++. Moje badania dotychczas doprowadziło mnie do poniższym fragmencie kodu:fizyczny rozmiar bloku na dysku POSIX za pomocą 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;
}
Strony man mówi po około st_blksize
:
Pole st_blksize daje „preferowany” rozmiar bloku dla efektywnego systemu pliku I/O. (Zapis do pliku mniejszych kawałków może spowodować nieefektywne odczytu modyfikować-rewrite).
, ale nie wspomina, czy st_blksize
jest logiczny lub fizyczny rozmiar bloku na dysku.
Więc, jest st_blksize
fizyczny rozmiar bloku dysku, a jeśli tak, to jest to najbardziej przenośny sposób wykrywania POSIX OS fizycznego rozmiaru bloku dysku.
Nie sądzę, że jest to możliwe za pośrednictwem POSIX. –
Zastanawiam się, czym jest 'st_blksize' dla'/dev/null'. I zastanawiam się, czy byłby to rozmiar * fizyczny *, czy * logiczny *. –
@DanMoulding '/ dev/null' jest urządzeniem znakowym, a nie urządzeniem blokowym. – Petesh