1

正確には、スパース ファイルの穴と、ターゲット ファイル システムがそれらをサポートしていない、または完全にサポートしていない状況をキャッチするすべての拡張属性 (異なる EA の長さなど) を保持することを意味しますか? また、マウントされた NTFS ファイルシステムでは、代替ストリームでも動作するはずです。できるだけ多くのファイル属性を保持します。

プログレス GUI のコールバックも必要です。これはメンテナンス地獄のようで難しそうなので、Windows の SHFileOperation のように既に使用可能なものがあると思います。

私は GLIB を調べましたが、オープン/読み取り/書き込み/クローズのシーケンスで最も簡単な方法でそれを行っています。

4

1 に答える 1

1

sendfileは、少なくとも Linux 4.4 以前では、スパース ファイルをまったく処理しません。Linux 4.5 以降では、すべての詳細を隠す新しいシステム コールcopy_file_rangeがあります。

以前のバージョンの場合、lseekおよびSEEK_HOLEを使用して、ファイルの内容を穴付きでコピーする実際のを次に示します。cpの実装とは異なります。代わりに、ソースからすべてを読み取り、すべてゼロのブロックをスキップするため、宛先に穴が作成されますが、ソースからの穴の読み取りに時間がかかります。ただし、一部のファイル システムでは、スパース ファイルが既にサポートされていても、 SEEK_HOLEがサポートされていない可能性が非常に高く、その場合、私のコードは非スパース ファイルを作成することになります。

拡張属性に関しては、実際には listxattr を呼び出してから、拡張属性をgetxattr / setxattrで自分でコピーする必要があります。

Nano タイムスタンプはutimensat /futimens*で設定できます

于 2016-06-09T12:31:07.173 に答える