سؤال

أحاول الحصول على بعض المعلومات (على وجه التحديد حجم الكتلة) لجهاز الكتلة في Linux، في C++.هل من الممكن الحصول على حجم كتلة الجهاز دون تثبيته وربما دون النظر في الملفات الديناميكية (مثل تلك الموجودة في /sys)، ولكن من خلال استدعاء النظام فقط.

كنت أحاول مع stat, ، لكنه يقوم بإرجاع بيانات حول /dev نظام الملفات إذا سألت عنه /dev/sdb2.

إذا كان ذلك مستحيلًا باستخدام استدعاء النظام، فأين يجب أن أبحث في الملفات الديناميكية (لم أتمكن من تحديد موقعها أيضًا.)

هل كانت مفيدة؟

المحلول

تريد استخدامها ioctl, ، بخاصة BLKSSZGET.

نقلا عن لينكس/fs.h:

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

مثال غير مجرب:

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

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

نصائح أخرى

اعتقد ان ioctl يجب أن تكون القيمة بالأحرى unsigned long من size_t (الأحدث يتعلق بالذاكرة بشكل أكبر)، وأود أيضًا تهيئته إلى 0 (فقط في حالة BLKSSZGET عائدات unsigned int بدلاً من).

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

int fd = open("/dev/sda");
unsigned long blockSize = 0;
int rc = ioctl(fd, BLKSSZGET, &blockSize);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top