HANDLE是否类似于Linux中的文件描述符?据我所知,HANDLE是用来处理Windows上的所有资源的,比如字体、图标、文件、设备……,其本质上只是一个指向存储特定资源
是的,Windows句柄与Unix文件描述符(fd)非常相似。
注意,HANDLE
不是指向内存块的指针。虽然HANDLE
是typedef
'd是void *
,这只是为了让它更不透明。实际上,HANDLE
是一个在表中查找的索引,就像FD编号一样。
这篇博文探讨了一些相似点和不同点:http://lackingrhoticity.blogspot.com/2015/05/passing-fds-handles-between-processes.html
是的,它们在概念上相似。unix中的文件描述符将整数映射到指向其他对象(也可以是文件以外的东西)的指针的每个进程表。文件描述符不是统一的——有些东西存在于单独的"命名空间"中(例如,进程计时器)。在这方面,Windows是更正交的——CloseHandle总是释放资源,不管它是什么。
此外,句柄在Windows上指的是一个更广泛的概念。即使我们将讨论仅限于文件句柄,也存在显著差异。有一个名为_open_osfhandle()的函数是Windows上C运行时库的一部分。它的目的是"将C运行时文件描述符与现有的操作系统文件句柄关联起来"。也就是说,它是内核领域和C运行时领域之间的粘合函数。函数签名如下:
int _open_osfhandle (
intptr_t osfhandle,
int flags
);
文件句柄Windows实际上比C中的文件描述符功能更丰富,可以在使用CreateFileA (ANSI版本)或CreateFile (UTF16版本)创建文件句柄时进行配置,反映了*Nix和Windows之间的设计差异。结果句柄携带所有这些信息及其所有含义。
HANDLE
是一个void指针
typedef PVOID HANDLE;
typedef void *PVOID;
Windows数据类型