句柄是什么,句柄什么意思?
句柄是什么,句柄什么意思?详细介绍
本文目录一览: 什么是句柄?
句柄就是个数字,一般和当前系统下的整数的位数一样,比如32bit系统下就是4个字节。这个数字是一个对象的唯一标示,和对象一一对应。这个对象可以是一个块内存,一个资源,或者一个服务的context(如socket,thread)等等。
句柄(Handle)是计算机硬件中的一个概念,指的是一个指向某个对象的标识符。在计算机编程中,句柄常常用于管理内存和资源,通过句柄可以访问和操作对象。在操作系统中,句柄通常是一个整数值,用于标识某个对象的唯一性。
HANDLE(句柄)是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。
句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。
句柄就是用来区分各种内存对象的唯一标识符号,是个32位整数。有些是整个系统唯一(如窗口句柄),有些是当前进程或线程中唯一(如线程句柄,全局的有另一个标识符)。详细的可分为许多种,都是以H开头的。
问题一:文件句柄是什么在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。
句柄是什么意思
1、句柄为一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。
2、整个Windows编程的基础,一个句柄指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。
应用程序能够通过句柄访问相应的对象的信息,但是句柄不是指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows大量使用了句柄来标识对象。
扩展资料
windows需要向程序员提供必要的编程接口,在这些接口中,允许程序员访问、创建和销毁对象。但是,出于封装地考虑,windows并不想向程序员返回指针。指针包含了太多的信息。
首先指针给出了对象存储的确切位置;其次,要操作一个指针,程序员必须知道指针所指对象的内部结构特征,也即,windows必须向程序员暴露相应的数据结构,而这些数据结构也许是操作系统想向程序员隐藏的。
如果说COM技术向用户隐藏了数据,只暴露了接口并只允许按接口定义的方法操作数据的话,句柄这种方式则允许按自己的方式直接操作数据,但windows又不直接暴露数据。直接操作数据是程序员需要的,不暴露数据为windows所需要的,句柄封装方式实现了各取所需。
参考资料来源:百度百科-窗口句柄
参考资料来源:百度百科-句柄
这是操作系统里的一个概念,句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。
从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。
如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?
为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。
句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象
本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。
句柄(handle),有两种解释
1,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。
2,整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。
扩展资料:
注意事项:
1,内核对象句柄,是用来标识某个内核对象的一个ID 同一个对象的该id对于每个进程是不同的,具体如何实现是ms不公开的算法,以下是一个近似的,可能的算法。
2,进程创建时,windows系统为进程构造了一个句柄表。
3,当该进程希望获得一个内核对象句柄或者创建一个内核对象从而获得该对象句柄时。
4,系统会将在句柄表中增加一个表项,表项的内容中存储了指向目标内核对象的指针。
同时,系统返回这个表项在句柄表中的索引作为句柄。
参考资料:百度百科——句柄
句柄是什么意思?
句柄是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。
最左素短语是句型中最左边的素短语。素短语是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。
句柄并不是一种具体的、固定不变的数据类型或实体,而是代表了程序设计中的一个广义的概念。句柄一般是指获取另一个对象的方法一个广义的指针。
它的具体形式可能是一个整数、一个对象或就是一个真实的指针,而它的目的就是建立起与被访问对象之间的唯一的联系。
扩展资料:
句柄在 Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。
句柄什么意思?
句柄是计算机用语,本质上就是一个数字,它通常与当前系统中的整数数相同,例如,在32位系统中,它是4个字节。
这个数字是一个对象的唯一符号,与该对象一一对应,此对象可以是块内存、资源或服务(如套接字、线程)的上下文等。
这个数字有很多来源,只要它能确保与它所代表的对象的唯一对应。例如,可以使用内存地址、句柄表序列号,或者简单地使用自动递增ID,或者使用上面的值来异或常量。
扩展资料:
Windows为何要设置句柄?
windows之所以要设置句柄,根本上是因为内存管理机制的问题-虚拟地址。简而言之,需要更改数据的地址,变更后,需要有人记录管理变更(就像户籍管理一样)。
因此,系统使用handle来记录数据地址的变化。
传统上,操作系统内核和系统服务API都是C语言接口,但它们的内部设计思想都是面向对象的,因此存在一个没有相应语言语法支持的对象概念。
handle的功能是在C语言环境中替换C++的对象指针。创建句柄就是构造,破坏句柄就是分析,用句柄调用函数就等于传递这个指针。
如果有带C++接口的系统API,则没有句柄,而是接口指针ixxxxptr等,如windowscomPTR。
参考资料来源:百度百科-句柄
句柄(handle),有多种意义,其中第一种是指程序设计,第二种是指Windows编程。现在大部分都是指程序设计/程序开发这类。
第一种解释:句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。
第二种解释:整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows大量使用了句柄来标识对象。
WINDOWS每打开一个窗口(包含程序运行时的窗口),以及每个窗口内的控件(按扭,输入框等)都会随机分配一个号码,这个号码就是这一窗口或控件的句柄
例如:我此刻回复你的浏览器的窗口句柄是69010.当然这个句柄号在我电脑里是69010.在你电脑里又会是另一个号,而且当我将这个窗口关掉再打开,句柄号又会再变成另一个
句柄有两种意思,其中第一种是指程序设计,第二种是指Windows编程。
句柄实际上是一个数据,是一个Long (整长型)的数据。
句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。
WINDOWS句柄有点象C语言中的文件句柄。
从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。
从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。
扩展资料:
句柄的具体作用:
Windows是一个以虚拟内存为基础的操作系统。在这种系统下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。
地址总是如此变化 ,为了寻找到对象,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。
Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。
这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。
参考资料:百度百科-句柄
什么是句柄
句柄,是系统程序对数据定义的标识,通常是一个整数。
系统程序和用户程序需要进行数据交换,为了避免传递大量数据,尤其是不希望用户直接操作数据,系统使用一个数字来表示这组数据(例如与一个窗口相关的一组数据)。用户程序如果需要对数据进行修改,都只能通过系统程序提供的函数以及数据的句柄和相关参数来完成。
系统程序很可能使用数据的地址作为句柄,但这仅仅是可能,完全取决于定义句柄的程序。
希望解释清楚了。
WINDOWS每打开一个窗口(包含程序运行时的窗口),以及每个窗口内的控件(按扭,输入框等)都会随机分配一个号码,这个号码就是这一窗口或控件的句柄
例如:我此刻回复你的浏览器的窗口句柄是69010.当然这个句柄号在我电脑里是69010.在你电脑里又会是另一个号,而且当我将这个窗口关掉再打开,句柄号又会再变成另一个
句柄就是个数字,一般和当前系统下的整数的位数一样,比如32bit系统下就是4个字节。
这个数字是一个对象的唯一标示,和对象一一对应。
这个对象可以是一个块内存,一个资源,或者一个服务的context(如 socket,thread)等等。
这个数字的来源可以有很多中,只要能保证和它代表的对象保持唯一对应就可以,比如可以用内存地址,也可以用句柄表的序号,或者干脆用一个自增ID,再或者用以上的值去异或一个常数。
扩展资料:
windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。
传统上操作系统内核和系统服务API都是 C 语言接口的,但是其内部设计理念上又是OO的,所以有对象概念却没有对应的语言语法支持。
句柄的作用就是在 C 语言环境下代替 C++ 的对象指针来用的,创建句柄就是构造,销毁句柄就是析构,用句柄调用函数相当于传入this指针。
如果有系统API是 C++ 接口的,那么就没有句柄了,而是某个接口指针,IXXXPtr之类的,比如Windows的com ptr。
参考资料来源:百度百科-句柄
句柄是什么
句柄就是用来区分各种内存对象的唯一标识符号,是个32位整数。
有些是整个系统唯一(如窗口句柄),有些是当前进程或线程中唯一
(如线程句柄,全局的有另一个标识符)。
详细的可分为许多种,都是以H开头的。在VB中使用时全部都用Long。
常见的有窗口句柄(HWND),设备描述表句柄(HDC),内存句柄(HMEM),
文件句柄,进程句柄,线程句柄,笔的类型句柄(HPEN),字体句柄(HFONT),
区域句柄(HRGN)等等。
在申请句柄时是要占用资源的,分三类SYSTEM、USER、GDI。
而WINDOWS的资源是固定的,并不随内存的扩大而扩大,所以使用完以后一定要释
放。
>
如果只用VB本身的代码一般是不会用到句柄的,但要是使用API函数的话,
大多数会使用。
再Windows系统中,句柄(我一直觉得这个词翻译得特别别扭)分为三大类:Kernel
Handle、UserHandle和应用程序自定义的Handle。
KernelHandle实际上是进程内Kernel对象的指针表索引,Kernel对象包括进程、文
件、信号等。但是MS为了掩盖着一事实,在系统启动时生成了一个所谓Obsfucator的值
(其实应该是Obfuscator,MicrosoftBugs(R):),生成Handle后将Handle与这个值异
或后返回给应用程序,所以看到的Handle都是一些很大而且毫无意义的数字。这些
Handle和索引的对象是由KRNL32.DLL和VMM32.VXD共同管理的,所以称之为Kernel
Handle。
UserHandle是用来标示窗口、DC等对象的,他们是真实的指针,但指向的并不是对象
的开头,有一个偏移量。同样,这些对象是由USER32.DLL管理的。
第三种Handle不过是应用程序自定义的一些索引之类的东东,具体的意义和应用程序相关
句柄是什么
句柄相当于标识,用它就可以对对应的对象进行操作,灰常方便,十分方便 哈哈
句柄是从英文翻译过来的词,原文叫handle,操纵杆的意思。翻译成句柄,很令人费解。
从计算机软件核心来看,句柄是一个无符号整型数,它相当于一个指针地址,指向一个“资源块”,例如 HWND 型的 句柄,不同的句柄 指向 不同的 窗体资源块。
从我们写程序来看,可以把它看成 窗 的 ID ( 标识),例如:HWND hwd1,hwd2;
hwd1 就是 1号窗,hwd2 就是 2号窗。
对 hwd1 的操作,就是对 1号窗 做操作。
对 hwd2 的操作,就是对 2号窗 做操作。
c/c++ 有多种多样的 句柄。我们把他们看成 ID 或 一样东西的别名,一个对象(object) 的别名。
句柄是什么
简单的说是无符号长整数,复杂的说是一种资源标识,有点类似资源指针,但不是指针,因为系统担心用户不恰当的使用指针造成严重后果。
百科如下:
HANDLE(句柄)是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。句柄列表:每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程,和文件等,进程中的所有线程都可以访问这些资源。
其实我们编程时输出一下句柄的值就可以发现这些值往往非常小(<100)。由此就可以看出句柄的性质了。
句柄是什么
句柄是一种不透明指针,通常用来对用户隐藏数据结构实现,这样可以防止用户任意修改数据对象的内容,所有操作必须通过相应API进行,这是一种OOP中常见的概念,即信息隐藏(封装),好处是实现者可以随意修改数据结构实现也不用影响客户代码。比如Win32上有个叫HANDLE的类型,其定义成类型void*这种不透明指针,用户无从知道具体对应的结构体。
就像vbtrazz所说,也可以是资源编号,任何可以唯一标识一个对象的东西都可以说是句柄,好处上面已经提及。
句柄就是一个序号。。用于管理内核对象的,比如你打开一个文件,就建立一个文件内核对象,这个内核对象就是一块内存结构,里面有文件路径,文件大小,当前文件指针等等信息。系统里面会打开很多的文件,就有很多很多的内核对象,这时候就建立一个句柄表的东西。表中每一个元素,都是一个内核对象的起始地址,然后给每一个对象对应一个序号。
这个序号就是我们说的句柄。
//句柄表类似于这样的结构,那个序号就是句柄了
-----------------------------------
0
第一个内核对象的地址
1
第二个内核对象的地址
2
第三个内核对象的地址
-------------------------------------
一定要注意它是序号,不是内核对象。