是HANDLE类似于Linux中的文件描述符
Is HANDLE similar to file descriptor in Linux?
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数据类型
- 使用VerQueryValue检索应用程序的文件描述
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- I2C 文件描述符上的 I2C 总线可写/可读标志
- 许多文件描述符在调用sys_clone时
- AMQP-CPP >处理程序中的错误文件描述符
- 如何使用 WINAPI 和 C++ 提取可执行文件的文件描述?
- 正在等待在非阻塞文件描述符上长时间运行ioctl
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 如何强制文件描述符缓冲我的输出
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- 哪个更适合从C++写入敏感的日志文件,在文件描述符上写()或文件上的fprintf()?
- 将 select() 与非基于文件描述符的输入一起使用
- accept(..) 似乎正在修改我给它的文件描述符参数
- 使用 Select 多路复用未命名的管道和其他文件描述符
- 提升 ASIO 绑定:错误的文件描述符
- 使用文件描述符移动对象
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- read() 上的不同行为取决于写入不可写内存时表示文件、匿名管道或套接字的文件描述符
- 我可以在不使用 FIOCANCEL 的情况下关闭 VxWorks 中的文件描述符吗?
- 将 Boost Asio 与 ZeroMQ 集成,文件描述符错误?