千家信息网

linux句柄的概念是什么

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇内容主要讲解"linux句柄的概念是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"linux句柄的概念是什么"吧!在linux中,句柄是一个标识符
千家信息网最后更新 2025年02月02日linux句柄的概念是什么

本篇内容主要讲解"linux句柄的概念是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"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句柄的概念是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

句柄 文件 系统 对象 内核 指针 标识 操作系统 用户 内存 进程 地址 概念 指向 类型 管理 下标 套接字 把手 标准 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 游戏数据库开启代理商 计算机三级网络技术练习题 天津住宿软件开发 闵行区使用网络技术网上价格 软件开发环境和生产环境搭建 批处理自动备份还原数据库 网络安全的基本攻防方法 企业网络安全黑板报插画 广安手机软件开发 网络安全法正式颁布 服务器状态up什么意思 系统无法访问数据库是因为死锁吗 交行软件开发中心社会招聘 路由器 转发服务器 代理服务器地址填加速软件 任务管理器找不到服务器 软件开发系统文档 数据库数据完整性实验5 马云创业是互联网软件开发吗 宽带服务器故障咋样修理 什么是网络安全等级保护 数据库name两个 java实例数据库增查 什么是源服务器 网络安全监测预警应急处置 北京云月共创网络技术有限公司 数据库同步工具免费下载 tomcat怎么获取数据库数据 汉中app与软件开发多少钱 企业留言板数据库设计
0