Estruturas buscadas do Ultrix 3.0 v7 de restor
para que variações possam ocorrer:
O s5fs é bastante arcaico, mas ...:
O layout do disco pode ser algo como:
[B][S][Inode List][ Data Blocks ]
| |
| +-- Super Block
+----- Boot Area
O Super Block contém dados para o sistema de arquivos. A Lista de Inodes é uma matriz de inodes contendo dados para arquivos (incluindo diretórios) e ponteiros para os dados que residem nos Blocos de Dados .
A Lista de Inodes é de tamanho fixo.
Estrutura do Super Block no disco:
struct filsys {
unsigned short s_isize; /* size in blocks of i-list */
daddr_t s_fsize; /* size in blocks of entire volume */
short s_nfree; /* number of addresses in s_free */
daddr_t s_free[NICFREE]; /* free block list */
short s_ninode; /* number of i-nodes in s_inode */
ino_t s_inode[NICINOD];/* free i-node list */
char s_flock; /* lock during free list manipulation */
char s_ilock; /* lock during i-list manipulation */
char s_fmod; /* super block modified flag */
char s_ronly; /* mounted read-only flag */
time_t s_time; /* last super block update */
daddr_t s_tfree; /* total free blocks*/
ino_t s_tinode; /* total free inodes */
short s_m; /* interleave factor */
short s_n;
char s_fname[6]; /* file system name */
char s_fpack[6]; /* file system pack name */
long s_unique; /* saved unique number (sys unique) */
};
Estrutura de um Inode no disco:
struct dinode
{
unsigned short di_mode; /* mode and type of file */
short di_nlink; /* number of links to file */
short di_uid; /* owner's user id */
short di_gid; /* access control file (was gid) */
off_t di_size; /* number of bytes in file */
char di_addr[40]; /* disk block addresses */
time_t di_atime; /* time last accessed */
time_t di_mtime; /* time last modified */
time_t di_ctime; /* time created */
};
di_mode
diria se é um arquivo normal, um diretório, um pipe nomeado etc. e quais permissões ele contém.
Você está perguntando especificamente sobre o di_addr
. Isso contém 13 endereços de três bytes, totalizando 39 bytes. O último byte é usado por alguns sistemas como máscara de criação de arquivos para diretórios.
O arquivo lib.c
na raiz da fonte restor
, (consulte o início), contém funções para converter longs de e para endereços de disco de 3 bytes.
Os primeiros 10 são ponteiros diretos, 11-13 são ponteiros indiretos.
Conforme você solicita o bloco número 5, isso seria um ponteiro direto. Leia o seu valor e leia os dados desse bloco.
Outra ref: link