【发布时间】:2009-11-04 06:22:45
【问题描述】:
我需要将数据写入驱动器。我有两个选择:
- 写入原始扇区。(_write(handle, pBuffer, size);)
- 写入文件 (fwrite(pBuffer, size, count, pFile);)
哪种方式更快?
我希望原始扇区写入函数 _write 更有效。但是,我的测试结果失败了! fwrite 更快。 _write 花费更长的时间。
我已经粘贴了我的 sn-p;也许我的代码是错误的。你能帮我吗?无论哪种方式我都可以,但我认为原始写入更好,因为驱动器中的数据似乎至少是加密的......
#define SSD_SECTOR_SIZE 512
int g_pSddDevHandle = _open("\\\\.\\G:",_O_RDWR | _O_BINARY, _S_IREAD | _S_IWRITE);
TIMER_START();
while (ulMovePointer < 1024 * 1024 * 1024)
{
_write(g_pSddDevHandle,szMemZero,SSD_SECTOR_SIZE);
ulMovePointer += SSD_SECTOR_SIZE;
}
TIMER_END();
TIMER_PRINT();
FILE * file = fopen("f:\\test.tmp","a+");
TIMER_START();
while (ulMovePointer < 1024 * 1024 * 1024)
{
fwrite(szMemZero,SSD_SECTOR_SIZE,1,file);
ulMovePointer += SSD_SECTOR_SIZE;
}
TIMER_END();
TIMER_PRINT();
【问题讨论】:
-
写入原始数据根本没有加密——它只是让用户感到困惑......
-
+1 用于分析。 (虽然这个问题在我头上)
-
致 bdonlan:我只是希望它看起来像被加密......对用户不可见
-
您还使用 CRT 而不是 Win32 API 进行文件写入。显然缓冲是问题的一部分——文件写入被缓冲,原始磁盘写入没有。也就是说,使用 _write 意味着 write 调用在写入数据之前无法返回。使用带有 OVERLAPPED 结构的 WriteFileEx 可以让您排队更多的写入,这应该或可能导致更高的吞吐量(在原始 dis 和文件写入)情况下。
-
但是在Linux中类似的功能是什么,thanx