dポイントプレゼントキャンペーン実施中!

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

A 回答 (2件)

OSによるので、OSのカテゴリで質問してください。



Unix/Linuxだと、ディスク全体とか、あるパーティション全体とかが、仮想ファイルとして扱えるので多分楽。バイト位置でのアクセスになるので、物理ブロックサイズを調べて、ブロック番号をバイト位置に変換して、root権限でlseekしてreadすればいい。
    • good
    • 0
この回答へのお礼

ネットできない環境にいてお礼遅くなりました。確かに言葉足らずでした。
ファイルシステムの勉強かねて、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);
}

お礼日時:2010/03/18 16:36

意味が分からない。


本当にC言語の質問なのだろうか?

特殊な環境に依存する読み書きに関する事項なのか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/03/18 16:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!