Получить сведения о файле по его inode (fs ext3 )

Автор: Ьфдфлрщм Дата: 03.10.2007 17:27 Собственно сабж.
Здесь кое-что накидал:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include "/usr/include/ext2fs/ext2_fs.h"

#define USAGE "Порядок использования: inode номер_индексного_узла
"
#define DEV_BSHIFT 9
#define DEV_BSIZE ( 1 << DEV_BSHIFT )
#define DEVICE "/dev/sda7"

int main( int argc, char *argv[] )
{
  int fd;
  long inumber;
  char sb_buf[ ( sizeof( struct ext2_super_block ) / DEV_BSIZE + 1 ) * DEV_BSIZE ];
  struct ext2_super_block *superblock = ( struct ext2_super_block * ) sb_buf;
  
  ssize_t nread;
  off_t fsbo, fsba;
  char *inode_buf;
  size_t inode_buf_size;
  
  inumber = atol( argv[ 1 ] );
  fd = open( DEVICE, O_RDONLY ); //)
  lseek( fd, DEV_BSIZE * 2 , SEEK_SET ); //)
  
  nread = read( fd, sb_buf, sizeof( sb_buf ) ) ){
    
  printf( "Сведения из суперблока для %s:
", DEVICE );
  printf( "\tвремя послей записи = %s", ctime( &superblock->s_wtime ) );
  printf( "\tкол-во блоков = %ld
", ( long )superblock->s_blocks_count );
  printf( "\tкол-во блоков с данными = %ld
", (long)superblock->s_blocks_count - superblock->s_free_blocks_count );
  printf( "\tразмер основного блока = %ld
", ( long ) superblock->s_log_block_size );
  printf( "\tразмер фрагм. блока = %ld
", ( long ) superblock->s_log_frag_size );
  printf( "\tточка монтирования %s
", superblock->s_volume_name );
               

Код накидал быстро, обработки ошибок пока нет.
Данные из суперблока прочел, а вот далее немного в ступоре я.
Понимаю, что надо найти смещение блока, в к-ом находится индексный узел, а потом найти смещение узла уже внутри самого блока.( могу ошибаться )
Не получается закодить эти действия. Может кто делал что-то подобное, тогда примерчиком поделитесь.
Re: получить сведения о файле по его inode (fs ext3 ) 03.10.2007 18:13Ьфдфлрщм вроде как сообразил:
fsba = ( inumber - 1 ) / superblock->s_inodes_per_group;
fsbo = ( inumber - 1 ) % superblock->s_inodes_per_group;
Re: получить сведения о файле по его inode (fs ext3 ) 05.10.2007 16:17Ьфдфлрщм Не могу осилить :как терь вычислить смещение?
Re: получить сведения о файле по его inode (fs ext3 ) 06.10.2007 21:19Bircoph А зачем изобретать велосипед?
---
# export DEBUGFS_PAGER=/bin/cat
# debugfs -R "stat <$inode_id>" /dev/hdaX
---
Если это лишь кусок программы, посмотрите в код debugfs.
RSS-материал