حظر معلومات الجهاز دون التثبيت في Linux
-
29-10-2019 - |
سؤال
أحاول الحصول على بعض المعلومات (على وجه التحديد حجم الكتلة) لجهاز الكتلة في 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);
لا تنتمي إلى StackOverflow