0

例としてVirtualBoxの仮想ディスクを取り上げます。VirtualBoxがホストOSのファイルシステムからのバッファメカニズムを回避しなかった場合、ゲストOSのファイルシステムはデータをメモリからメモリに移動します。

実際、私はユーザースペースにファイルシステムを書きたいと思っています(すべてのディレクトリとファイルを1つの大きなファイルに入れます)。しかし、freadやfwriteなどのcapiを使用すると、OSのFileSystemは、My UserSpace-FileSystemが読み取り、書き込みするデータをバッファリングしますが、My UserSpace-FileSystemは、それ自体でバッファメカニズムを実装しています。バッファメカニズムを回避しなかった場合OSのFileSystemから、MyUserSpace-FileSystemはデータをメモリからメモリに移動します。それはとても悪いです。

この問題を解決する方法を知っている人はいますか?

4

2 に答える 2

4

stdioそれをサポートしていません。

*NIX の場合: man openO_DIRECT の場合、man fadviseおよびman madvise.

Windows の場合は、 を確認しCreateFileてくださいFILE_FLAG_NO_BUFFERING。おそらく、CreateFileMappingあまりにも掘る良い考えです。

于 2010-08-06T13:04:10.750 に答える
1

あなたの質問はあまり明確ではありませんが、あなたがしたいのがstdioバッファリングなしで使用することだけであるなら、setbuf(file, NULL);あなたの問題を解決するでしょう。より良い解決策は、stdio完全に回避し、低レベルのioプリミティブなどを使用することreadですwrite(プレーンCの一部ではなく、POSIXによって指定され、ほとんどの非POSIXシステムでもほぼ同等のバージョンが利用可能です)。

于 2010-08-06T12:20:14.517 に答える