MSDN 在其ReadFile()
功能描述中指出:
如果 hFile 使用 打开
FILE_FLAG_OVERLAPPED
,lpOverlapped 参数必须指向一个有效且唯一的OVERLAPPED
结构,否则该函数可能会错误地报告读取操作已完成。
我有一些应用程序违反了上述建议,我想知道问题的严重性。我的意思是该程序使用已创建的命名管道FILE_FLAG_OVERLAPPED
,但它使用以下调用从中读取:
ReadFile(handle, &buf, n, &n_read, NULL);
这意味着它NULL
作为lpOverlapped
参数传递。根据文档,该调用在某些情况下不应正常工作。我花了很多时间试图重现这个问题,但我无法做到!我总是在正确的时间将所有数据放在正确的位置。我只测试了命名管道。
有人知道我什么时候可以期望 ReadFile() 会错误地返回并报告成功完成,即使数据尚未在缓冲区中?为了重现问题,必须发生什么?文件、管道、套接字、控制台或其他设备是否会发生这种情况?我必须使用特定版本的操作系统吗?还是特定版本的读取(例如注册 I/O 完成端口的句柄)?或者读写进程/线程的特定同步?
或者什么时候会失败?这个对我有用 :/
请帮忙!
关于,马丁