【发布时间】:2011-06-29 19:44:30
【问题描述】:
我有一个非常奇怪的问题。我一直在使用 ReadFile() 从通过 USB 连接到 PC 的设备读取数据。由于要读取的数据是以 64 字节的块接收的,因此始终调用 ReadFile() 以读取 64 字节。但是,当我必须读取小于 64 字节的帧时,偶尔会发生崩溃。
我将举一个编写代码的例子:
//Memory allocation done to read 100 bytes from device - This value is known in prior and hence memory is allocated exactly
new(100bytes);
// First read of 64 bytes
ReadFile(64)
// Second read of 64 bytes
ReadFile(64)
-> 这里从设备发送的数据只有 100-64 = 36。因此,即使我说读取 64 字节,也不会有数据大于 36 字节的情况。因此,这段代码应该可以工作(尽管我知道分配更少的内存并调用 ReadFile 以获得大于内存分配的大小是不正确的)。
问题:如果数据读取的字节数多于内存分配完成的字节数,ReadFile() 会崩溃(尽管我们知道我需要读取的数据的确切大小是多少)
PS:这种实现的原因是开发的代码设计中的一个小缺陷。
【问题讨论】:
-
你是在异步模式下打开的吗? ReadFile 主要用于从文件(或设备)同步读取数据(它也支持异步模式)。如果您在异步模式下工作,我建议您使用 ReadFilEx