سؤال

ما هي أسهل طريقة للوصول إلى نظام ملف ext3 على مستوى الكتلة؟ لا يهمني الملفات أو البايت الخام، لا بد لي من قراءة كتلة واحدة في وقت واحد. هل هناك طريقة بسيطة للقيام بذلك (في ج)؟ أو ربما تطبيق بسيط الذي يمكن أن أنظر إليه مصدر إلهام؟ لم أجد برامج تعليمية قابلة للاستخدام على الشبكة، وأنا خائفة بعض الشيء من الغوص في مصدر النواة لمعرفة كيفية القيام بذلك.

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

المحلول

نعم، انظر e2fsprogs.. وبعد يوفر هذا الأدوات التي يمكنك استخدامها لتفعل أي شيء (!) مع ext2 و ext3 و ext4. يحتوي أيضا على واجهة مكتبة حتى تتمكن من فعل أي شيء آخر.

راجع Devugfs المضمنة، قد يكون ذلك كافيا لتبدأ. خلاف ذلك، تحقق من الرؤوس واكتب بعض الكود.

نصائح أخرى

إذا كنت تريد تطبيق بسيط، فأنا أقترح عليك إلقاء نظرة على "د"فائدة. أنا تأتي كجزء من فائدة جنو الأساسية. وبعد مصدرها متاح للتنزيل. ألق نظرة على صفحتها الرئيسية، هنا.
إذا كنت ترغب في تحقيق نفسه من رمز C، يرجى الرجوع إلى التعليمات البرمجية التالية. آمل أن يساعدك هذا. :)

#include <stdio.h>
#include <linux/fs.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define SECTOR_NO 10 /*read 10th sector*/

int main()
{
        int sector_size;
        char *buf;
        int n = SECTOR_NO;

        int fd = open("/dev/sda1", O_RDONLY|O_NONBLOCK);
        ioctl(fd, BLKSSZGET, &sector_size);
        printf("%d\n", sector_size);
        lseek(fd, n*sector_size, SEEK_SET);

        buf = malloc(sector_size);
        read(fd, buf, sector_size);

        return 0;
}

أجهزة القرص، والقسائم داخلها، تتصرف تماما مثل الملفات العادية التي يمكنك قراءتها من (والكتابة إلى)، على سبيل المثال:

head -c 2048 /dev/sda1 > first_2048_bytes

ستحتاج إلى أن تكون جذر بالطبع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top