• 締切済み

物理ブロック番号でのブロック読み出し方法

ユーザプロセスから、物理ブロック番号によるファイルのブロック読み出し/書き出しする方法を知りたいのですが。

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

OSによるので、OSのカテゴリで質問してください。 Unix/Linuxだと、ディスク全体とか、あるパーティション全体とかが、仮想ファイルとして扱えるので多分楽。バイト位置でのアクセスになるので、物理ブロックサイズを調べて、ブロック番号をバイト位置に変換して、root権限でlseekしてreadすればいい。

north111
質問者

お礼

ネットできない環境にいてお礼遅くなりました。確かに言葉足らずでした。 ファイルシステムの勉強かねて、ext2/3のext_inodeの論理ブロック(?)から物理ブロックはioctlでなんか取得できそうで、そのファイルシステム上のブロック番号を直接readすることで、ファイルの読み込みを実現できないものか。と思ったしだいです。 int get_blocks(int fd, int nr) { ioctl (fd, FIBMAP, &nr); return nr; } int get_nr_blocks (int fd) { struct stat buf; fstat (fd, &buf); return buf.st_blocks*512/buf.st_blksize; } void disp_blocks(int fd, int nr) { int i, phys_block; for (i = 0; i < nr; i++) { phys_block = get_blocks(fd, i); printf("%d,%d\n", i, phys_block); if (!phys_block) { nr++; } } } int main (int argc, char *argv[]) { int fd, nr; fd = open (argv[1], O_RDONLY); nr = get_nr_blocks (fd); disp_blocks(fd, nr); }

回答No.1

意味が分からない。 本当にC言語の質問なのだろうか? 特殊な環境に依存する読み書きに関する事項なのか?

north111
質問者

お礼

ネットできない環境にいてお礼遅くなりました。確かに言葉足らずでした。linux環境下でのことなのですが・・・。

関連するQ&A