在 C++ 中,我打开了一个具有 HANDLE
的串行端口。由于端口可能会被外部应用程序关闭,在读取数据之前如何验证 HANDLE
是否仍然有效?
我认为可以通过根据合适的 API 函数检查 HANDLE
来完成,但是哪个?
谢谢。
最佳答案
检查句柄是否“有效”是错误的。你需要有更好的方法来处理这个问题。
问题是,一旦句柄被关闭,相同的句柄值可以由不同的东西的新打开生成,并且您的测试可能会说句柄是有效的,但您并没有在您认为的文件上操作是。
例如,考虑这个序列:
- handle 打开,实际值为0x1234
- 使用句柄,传递值
- handle 已关闭。
- 程序的其他部分打开一个文件,得到句柄值 0x1234
- 原始句柄值是“检查有效性”,并通过。
- 使用了句柄,操作了错误的文件。
因此,如果这是您的流程,您需要跟踪哪些句柄有效,哪些无效。如果您从其他进程获得句柄,它将使用 DuplicateHandle() 将其放入您的进程中。在这种情况下,您应该管理句柄的生命周期,而源进程不应该为您这样做。如果您的句柄正在从另一个进程关闭,我假设您是这样做的人,并且您需要处理簿记。
关于c++ - 如何检查 HANDLE 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5603625/