2009-11-18 123 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調用。