是HANDLE类似于Linux中的文件描述符

Is HANDLE similar to file descriptor in Linux?

本文关键字:文件 描述 HANDLE 类似于 Linux      更新时间:2023-10-16

HANDLE是否类似于Linux中的文件描述符?据我所知,HANDLE是用来处理Windows上的所有资源的,比如字体、图标、文件、设备……,其本质上只是一个指向存储特定资源

数据的内存块的void指针。

是的,Windows句柄与Unix文件描述符(fd)非常相似。

注意,HANDLE不是指向内存块的指针。虽然HANDLEtypedef '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数据类型