2009-11-18 93 views
5

我想直接从磁盘读取一个特定的扇区。我目前已经用完了想法,并且提出了一些关于如何去做的建议将会很棒! (我是一个Linux新手)阅读单扇区

回答

5

尝试是这样的,从CLI做到这一点:

# df -h . 
Filesystem   Size Used Avail Use% Mounted on 
/dev/sda2    27G 24G 1.6G 94%/
# dd bs=512 if=/dev/sda2 of=/tmp/sector200 skip=200 count=1 
1+0 records in 
1+0 records out 

man 4 sd

FILES 
    /dev/sd[a-h]: the whole device 
    /dev/sd[a-h][0-8]: individual block partitions 

如果你想从内做到这一点程序,只需使用来自man 2 ...(如open, lseek,read)的系统调用组合,并使用来自dd示例的参数。

+0

考虑到现在磁盘的大小,可以使用'lseek64()'或'#define _FILE_OFFSET_BITS 64'来确保'off_t'是一个64位类型。 – caf 2009-11-18 02:04:27

+0

您能否给一些c编程语言特定的函数来读写磁盘扇区? – Mehdi 2016-07-02 15:50:37

2

我不确定什么是最好的编程方法,但是从Linux命令行中,您可以将dd命令与您的磁盘的原始设备结合使用,以便直接从磁盘读取数据。

您需要sudo此命令才能访问原始磁盘设备(例如/ dev/rdisk0)。

例如,以下内容将从disk0顶部的900个块的偏移量中读取一个512字节的块并将其输出到stdout。

sudo dd if=/dev/rdisk0 bs=512 skip=900 count=1 

查看dd手册页以获取有关dd参数的更多信息。

+0

在Linux下,光盘设备通常不会被称为/ dev/rdisk0,您可能想要类似/ dev/sda – MarkR 2009-11-18 08:00:49

+0

的跳/寻找让我进入物理扇区还是逻辑块? – yonigo 2013-08-29 06:18:58

0

其他人已经涵盖了它。您需要

  • 访问磁盘的设备文件(或者是根,或者更好,更改它的权限)

  • 使用文件IO功能读取的扇区=(通常)块512来自所述磁盘的字节。

+0

你能否提到一些特定的c编程语言函数来读写扇区 – Mehdi 2016-07-02 15:47:05

0

你会用这个dd,或者你可以写一个c程序并使用write sys调用。