想知道是否有人嘗試過低級磁盤I/O,比如讀取原始扇區,MBR等。我已經做了一些圍繞自己的挖掘工作,無法找到任何關於它的提及。大部分情況是有人談論Go的本地io
包的死衚衕。Golang的低級磁盤I/O
任何線索將不勝感激。
想知道是否有人嘗試過低級磁盤I/O,比如讀取原始扇區,MBR等。我已經做了一些圍繞自己的挖掘工作,無法找到任何關於它的提及。大部分情況是有人談論Go的本地io
包的死衚衕。Golang的低級磁盤I/O
任何線索將不勝感激。
我還是新的去,所以我的例子不是特別優雅,但我認爲這是你想要什麼:
package main
import (
"syscall"
"fmt"
)
func main() {
disk := "/dev/sda"
var fd, numread int
var err error
fd, err = syscall.Open(disk, syscall.O_RDONLY, 0777)
if err != nil {
fmt.Print(err.Error(), "\n")
return
}
buffer := make([]byte, 10, 100)
numread, err = syscall.Read(fd, buffer)
if err != nil {
fmt.Print(err.Error(), "\n")
}
fmt.Printf("Numbytes read: %d\n", numread)
fmt.Printf("Buffer: %b\n", buffer)
err = syscall.Close(fd)
if err != nil {
fmt.Print(err.Error(), "\n")
}
}
這裏是一個系統調用包文檔的鏈接:http://golang.org/pkg/syscall/
根據在這個頁面上,這個軟件包試圖與儘可能多的不同平臺兼容,但是我的新手眼睛看起來好像主要目標是Linux API,當然,它使用習慣用法來簡化事情。我希望這回答了你的問題!
On * nix你可以在/ dev/ – nos
中讀取/寫入原始設備文件是的,但是如果有跨平臺的方式來做這件事,那麼會很好,因爲Go是跨平臺的......沒有用C語言編寫所有代碼,儘管如果需要可能。 '/ dev /'文件對我來說可以,因爲我在任何地方都運行* NIX。不過,我知道它們不存在於Windows中。 – Sly
不存在這樣的跨平臺API,至少不適用於Go。 btw窗口在\\。\命名空間中有特殊文件,例如\\。\ PhysicalDisk0或\ Device \ XXX \ – nos