HANDLE和Linux中的文件描述符类似吗?据我所知,HANDLE用于处理Windows上的所有资源,如字体、图标、文件、设备等等,本质上只是一个指向存储特定资源数据的内存块的空指针。
HANDLE和Linux中的文件描述符类似吗?据我所知,HANDLE用于处理Windows上的所有资源,如字体、图标、文件、设备等等,本质上只是一个指向存储特定资源数据的内存块的空指针。
是的,Windows 句柄与 Unix 文件描述符(FD)非常相似。
请注意,HANDLE
不是指向内存块的指针。尽管 HANDLE
被 typedef
为 void *
,但这只是为了使其更加不透明。实际上,HANDLE
是一个在表格中查找的索引,就像 FD 号码一样。
此博客文章探讨了一些相似之处和不同之处:http://lackingrhoticity.blogspot.com/2015/05/passing-fds-handles-between-processes.html
是的,它们在概念上相似。在Unix中,文件描述符将整数映射到其他对象(除文件外)的每个进程表中的指针。但是,文件描述符并不像Windows那样统一——某些内容存在于单独的“命名空间”中(例如进程计时器)。在这方面,Windows更加正交——无论是什么资源,CloseHandle始终会释放。
int _open_osfhandle (
intptr_t osfhandle,
int flags
);
文件句柄在Windows中比C语言中的文件描述符更加功能丰富,可以在创建文件句柄时使用CreateFileA(ANSI版本)或CreateFile(UTF16版本)进行配置,这反映了*Nix和Windows之间的设计差异。结果句柄携带所有这些信息及其影响。
typedef HANDLE HINSTANCE;
是完全错误的,就像许多其他typedef HANDLE一样。它们中的绝大多数现在都是DECLARE_HANDLE()
结构。”他是正确的,MSDN页面是错误的。) - Ben Voigt
CloseHandle()
关闭的简单说来。 - rodrigo