記事の本質を捉えた、質問形式の英語タイトルのオプションをいくつか示します。 **短く直接的:** * **Go で io.Copy() を使用するときにスパース ファイルを保存するにはどうすればよいですか?** * **できる

Patricia Arquette
リリース: 2024-10-27 06:32:03
オリジナル
470 人が閲覧しました

Here are a few options for an English title in a question format, capturing the essence of the article:

**Short & Direct:**

* **How to Preserve Sparse Files When Using io.Copy() in Go?**
* **Can io.Copy() Handle Sparse Files Efficiently?**

**More Descr

io.Copy() によって拡張されたスパース ファイル

バックグラウンド

io.Copy() は、io.Reader と io の間で生のバイトを転送します。 .ライター。ただし、ファイル内のホールの位置を処理する機能がありません。これは、read(2) などの syscall がユーザーから隠蔽するサイドチャネル情報とみなされます。

問題への対処

管理するにはスパース ファイルを使用する場合は、syscall パッケージを使用してパラメータを手動で操作する必要があります。 lseek(2) の SEEK_HOLE 値と SEEK_DATA 値は、このプロセスに不可欠です。

実装

  • サポートされているプラ​​ットフォームの SEEK_HOLE 値と SEEK_DATA 値を取得します。
  • os.File の Fd() メソッドを使用して、開かれたファイルからファイル記述子を取得します。
  • syscall.Seek() を使用してデータ領域を検出し、そこからデータを取得します。

疎性の維持

ファイルをスパースとして転送するのはより複雑です。 Linux では、fallocate(2) を FALLOC_FL_PUNCH_HOLE とともに使用してパンチホールを試みることができます。 FALLOC_FL_KEEP_SIZE。それが失敗した場合は、ゼロ化されたブロックを宛先に書き込み、OS がブロックをホールに変換するよう促します。

注意事項

  • FAT などの一部のファイルシステムはホールをサポートしません。
  • データをコピーせずに、同じファイルシステム内のディレクトリ間でファイルを移動するには、syscall.Rename() または os.Rename() を使用することを検討してください。

以上が記事の本質を捉えた、質問形式の英語タイトルのオプションをいくつか示します。 **短く直接的:** * **Go で io.Copy() を使用するときにスパース ファイルを保存するにはどうすればよいですか?** * **できるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!