Golang での低レベルのディスク I/O 探索
質問:
Golang での低レベルのディスク I/O 操作 (生のセクターや MBR の読み取りなど) を調査する試みが行われました。研究努力は無駄であることが判明し、主に Go のネイティブ IO パッケージについて議論する行き詰まりに至りました。
答え:
Golang で低レベルのディスク I/O を操作する人にとって、 syscall パッケージが貴重なツールとして登場しました。このパッケージは、さまざまなオペレーティング システム上の低レベルのシステム コールへのアクセスを提供し、生のセクターの読み取りやマスター ブート レコード (MBR) の探索などの操作を詳しく調べる機会を提供します。
この機能を実証するには、次の Golang を検討してください。コード:
<code class="go">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") } }</code>
この例では、/dev/sda ディスクが読み取り専用モードで開かれます。続いて、Read 関数を使用して最初の 10 バイトをディスクからバッファに読み取ります。読み取られたバイト数とバッファの内容が標準出力に出力されます。
syscall パッケージの詳細とドキュメントについては、http://golang.org/pkg にある公式ドキュメントを参照してください。 /システムコール/。このパッケージは、幅広いプラットフォームとの互換性をターゲットとしていることに注意してください。ただし、その主な焦点は、簡素化のために Golang のイディオムを採用した Linux API との対話にあるようです。
以上がGolang で低レベルのディスク I/O 操作を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。