c - 如果我在对句柄 h 的异步读取尚未完成之前调用 CloseHandle(h) 怎么办?

标签 c windows exception file-io asynchronous

考虑以下场景:

auto h = CreateFile(...);
ReadFileEx(h, ...); // Asynchronous read for a large block of data. say, 1GB.
CloseHandle(h); 
// If the read has not yet finished here, what will happen? Big Bang???

最佳答案

只要异步句柄在调用时有效,异步操作将保持有效直到它完成。这是因为异步文件 IO 调用在内核中持有对文件对象的隐式引用计数。

当异步事件完成时,如果在用户模式下不再有指向该文件的句柄,该文件将在内核内部关闭。

请注意,这确实有明显的副作用。特别是,如果您打开文件进行独占读/写,发出异步操作,然后关闭句柄,则在异步操作完成之前,文件将无法打开进行读/写。

关于c - 如果我在对句柄 h 的异步读取尚未完成之前调用 CloseHandle(h) 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14766465/

相关文章:

C# 无法捕获所有异常

c# - 转换格式异常处理

c - 使用 while 循环而不是 pow : What does this error mean?

c - 降级后 GCC 无法编译简单的 C 应用程序

windows - 重新连接到命名管道时出现问题

windows - 安装到特定用户文件夹更改为安装到当前用户文件夹

java - 将 LinkedBlockingQueue<> 中的数据放入非对象类型的数组

c - 关于C中内存使用的问题

c - 在 Glib 1.2 中使用 g_hash_table_foreach 时从哈希表中删除项目是否安全?

windows - 如何使用 MS-DOS 命令模拟 curl?