什么是句柄
句柄就是一个对象的标识符,只要获得对象的句柄,我们就可以对对象进行任意的操作,包括窗口,按钮,图标,输出设备,控件或者文件等;
句柄是一种特殊的智能指针,用一个唯一的整数值标识一个对象(即编号),并不指向实际的内核对象,而是内核对象的虚拟地址;
只有Windows中才有句柄,Windows中的句柄是指针的指针,因为windows中对象的经常会在内存中移动,所以地址值经常会变,所以就对外提供一个指针的指针即句柄给用户,句柄的地址是不会变的。
Linux中是没有文件句柄的,只有文件描述符,只是大家习惯把它说成句柄,Linux中, 每当进程打开一个文件时,系统就为其分配一个唯一对应的整型文件描述符,用来标识这个文件;Windows之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。
Windows系统中有许多内核对象(这里的对象不完全等价于"面向对象程序设计"一词中的"对象",虽然实质上还真差不多),比如打开的文件,创建的线程,程序的窗口,等等。这些重要的对象肯定不是4个字节或者8个字节足以完全描述的,他们拥有大量的属性。为了保存这样一个"对象"的状态,往往需要上百甚至上千字节的内存空间,那么怎么在程序间或程序内部的子过程(函数)之间传递这些数据呢?拖着这成百上千的字节拷贝来拷贝去吗?显然会浪费