句柄
句柄
和普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。
通俗的说,就是我们调用句柄 就是调用句柄所提供的服务,即句柄已经把它能做的操作都设定好了,我们只能在句柄所提供的操作范围内进行操作,但是普通指针的操作确实多种多样,不受限制。
文件描述符
文件描述符(File descriptor)
是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。
维基百科-文件描述符:https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6
文件描述符的优点主要有两个:
- 基于文件描述符的I/O操作兼容POSIX标准。
- 在UNIX、Linux的系统调用中,大量的系统调用都是依赖于文件描述符。
文件描述符的概念存在两大缺点:
- 在非UNIX/Linux 操作系统上(如Windows),无法基于这一概念进行编程——事实上,Windows下的文件描述符和信号量、互斥锁等内核对象一样都记作
HANDLE
。 - 由于文件描述符在形式上不过是个整数,当代码量增大时,会使编程者难以分清哪些整数意味着数据,哪些意味着文件描述符。因此,完成的代码可读性也就会变得很差,这一点一般通过消除魔术数字来解决。