Domanda

Qual è il modo più semplice per accedere a un file system ext3 a livello di blocco? Non mi interessa per i file, o byte prime, non mi resta che leggere il FS un blocco alla volta. C'è un modo semplice per fare questo (in C)? O forse una semplice applicazione la cui fonte ho potuto esaminare per l'ispirazione? Ho trovato alcun tutorial utilizzabili in rete, e sono un po 'paura di tuffarsi nel sorgente del kernel per scoprire come farlo.

È stato utile?

Soluzione

Si, vedi e2fsprogs . Questo fornisce gli strumenti che è possibile utilizzare per fare qualsiasi cosa (!) Con i file system ext2, ext3, ext4 e. Esso contiene inoltre un'interfaccia libreria in modo da poter fare altro.

Vedi le debugfs inclusi, potrebbe essere sufficiente per iniziare. In caso contrario, controllare le intestazioni e scrivere del codice.

Altri suggerimenti

Se si desidera una semplice applicazione, allora vi consiglio di dare un'occhiata al " dd " utility. Mi si presenta come parte di GNU Nucleo Utility . La sua sorgente è disponibile per il download. Date un'occhiata a sua home page, qui .
Se si vuole raggiungere lo stesso da un codice C, quindi si prega di fare riferimento al seguente codice. Spero che questo ti aiuta. :)

#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;
}

Le unità disco e partizioni al loro interno, si comportano proprio come file regolari che potete leggere da (e scrivere), per esempio:.

head -c 2048 /dev/sda1 > first_2048_bytes

È necessario essere root, naturalmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top