linux句柄的概念是什么

67次阅读
没有评论

共计 1852 个字符,预计需要花费 5 分钟才能阅读完成。

本篇内容主要讲解“linux 句柄的概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“linux 句柄的概念是什么”吧!

在 linux 中,句柄是一个标识符,是由系统所管理的引用标识,内核可以通过句柄来计算出内核里文件对象的地址;开发者只要获得对象的句柄,就可以对对象进行任意的操作。

本教程操作环境:linux5.9.8 系统、Dell G3 电脑。

什么是句柄

句柄就是一个标识符,只要获得对象的句柄,我们就可以对对象进行任意的操作。

句柄不是指针,操作系统用句柄可以找到一块内存,这个句柄可能是标识符,map 的 key,也可能是指针,看操作系统怎么处理的了。fd 算是在某种程度上替代句柄吧;Linux 有相应机制,但没有统一的句柄类型,各种类型的系统资源由各自的类型来标识,由各自的接口操作。

在操作系统层面上,文件操作也有类似于 FILE 的一个概念,在 Linux 里,这叫做文件描述符(File Descriptor),而在 Windows 里,叫做句柄(Handle)(以下在没有歧义的时候统称为句柄)。用户通过某个函数打开文件以获得句柄,此后用户操纵文件皆通过该句柄进行。

粗暴的解释

windowns 中是 handle,liunx 类似的是 fd,最早的 windows 开发书籍,handle 是被翻译成“把手”的。虽然不好听,但是个人认为相当传神。

虽然你握住的只是把手,却能拉动整扇门,而且你根本不用在意那门长什么样子

一扇门如果有多个把手,被不同的人(进程)握住,门往哪儿走就不好说了

设计这么一个句柄的原因在于句柄可以防止用户随意读写操作系统内核的文件对象。无论是 Linux 还是 Windows,文件句柄总是和内核的文件对象相关联的,但如何关联细节用户并不可见。内核可以通过句柄来计算出内核里文件对象的地址,但此能力并不对用户开放。

在 liunx 中的句柄

在 linux 系统设计里面遵循一切都是文件的原则,即磁盘文件、目录、网络套接字、磁盘、管道等,所有这些都是文件,在我们进行打开的时候会返回一个 fd,即是文件句柄。

如果频繁的打开文件,或者打开网络套接字而忘记释放就会有句柄泄露的现象。

在 linux 系统中对进程可以调用的文件句柄数进行了限制,在默认情况下每个进程可以调用的最大句柄数是 1024 个,如果超过了这个限制,进程将无法获取新的句柄,而从导致不能打开新的文件或者网络套接字,对于线上服务器即会出现服务被拒绝的情况。

下面举一个实际的例子,在 Linux 中,值为 0、1、2 的 fd 分别代表标准输入、标准输出和标准错误输出。在程序中打开文件得到的 fd 从 3 开始增长。

fd 具体是什么呢?

在内核中,每一个进程都有一个私有的“打开文件表”,这个表是一个指针数组,每一个元素都指向一个内核的打开文件对象。

而 fd,就是这个表的下标。当用户打开一个文件时,内核会在内部生成一个打开文件对象,并在这个表里找到一个空项,让这一项指向生成的打开文件对象,并返回这一项的下标作为 fd。

由于这个表处于内核,并且用户无法访问到,因此用户即使拥有 fd,也无法得到打开文件对象的地址,只能够通过系统提供的函数来操作。

在 C 语言里,操纵文件的渠道则是 FILE 结构,不难想象,C 语言中的 FILE 结构必定和 fd 有一对一的关系,每个 FILE 结构都会记录自己唯一对应的 fd。

在程序设计中, 句柄是一种特殊的智能指针。当一个应用程序要引用其他系统 (如数据库、操作系统) 所管理的内存 块或对象 时,就要使用句柄。

句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象 的控制。

在上世纪 80 年代的操作系统(如 Mac OS 和 Windows)的内存管理 中,句柄被广泛应用。Unix 系统的文件描述符 基本上也属于句柄。和其它桌面环境 一样,Windows API 大量使用句柄来标识系统中的对象,并建立操作系统与用户空间 之间的通信渠道。例如,桌面上的一个窗体由一个 HWND 类型的句柄来标识。

如今,内存容量的增大和虚拟内存算法使得更简单的指针愈加受到青睐,而指向另一指针的那类句柄受到冷淡。尽管如此,许多操作系统仍然把指向私有对象的指针以及进程传递给客户端的内部数组下标称为句柄。

到此,相信大家对“linux 句柄的概念是什么”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计1852字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)