文件描述符&文件句柄
一、概念
1.1 文件描述符&文件描述符表
文件描述符(file descriptor, fd)是Linux系统中对已打开文件的一个抽象标记,所有I/O系统调用对已打开文件的操作都要用到它。这里的“文件”仍然是广义的,即除了普通文件和目录外,还包括管道、FIFO(命名管道)、Socket、终端、设备等
文件描述符是一个较小的非负整数,并且0、1、2三个描述符总是默认分配给标准输入、标准输出和标准错误(即常用的 nohup test.sh > test.log 2>&1 & 的由来)
进程启动后,会在内核空间中创建一个 PCB 控制块,PCB 内部有一个文件描述符表(File descriptor table),记录着当前进程所有可用的文件描述符,也即当前进程所有打开的文件。
- 控制该描述符的标记域(flags)
- 指向系统级别的打开文件表中对应条目的指针
1.2 文件句柄&打开文件表
内核会维护系统内所有打开的文件及其相关的元信息,该结构称为打开文件表(open file table)。表中每个条目包含以下域:
- 文件的偏移量。POSIX API中的read()/write()/lseek()函数都会修改该值
- 打开文件时的状态和权限标记。通过open()函数的参数传入
- 文件的访问模式(只读、只写、读+写等)通过open()函数的参数传入
- 指向其对应的inode对象的指针
1.3 文件描述符表,打开文件表,inode表之间的关系
数字代表下标,不表示标准描述符
二、文件描述符与文件句柄的限制
例如系统报错 too many open files ,实际是文件描述符数量有限
2.1 文件描述符
2.1.1 查看
#查看进程的文件描述符
ll /proc/PID/fd
lsof #查看进程级别最大文件描述符数
ulimit -n #查看用户级别最大文件描述符数
ulimit -u
#查看当前使用的文件描述符数
lsof -P -n | wc -l
2.1.2 修改
临时修改
ulimit -Sn
ulimit -Hn
永久修改(重启后生效)
vim /etc/security/limits.conf
#OPPO Standard limits config
root hard nofile unlimited #root用户最大描述符使用数量--无限
* soft nofile 20480000 #*表示所有用户,超过发出警告
* hard nofile 20480000 #最大描述符使用数量,超过输出错误
2.2 文件句柄
2.2.1 查看
#查看最大文件句柄打开数
cat /proc/sys/fs/file-max #三列数据分别为:已分配文件句柄的数目,已分配未使用文件句柄的数目,文件句柄的最大数目
cat /proc/sys/fs/file-nr
2.2.2 修改
临时修改
echo 6553500 > /proc/sys/fs/file-max
永久修改(使用sysctl -p 即不需要重启系统也可以生效)
echo "fs.file-max=419430" >> /etc/sysctl.conf
sysctl -p
文件描述符&文件句柄的更多相关文章
- 误删除innodb ibdata数据文件 文件句柄 文件描述符 proc fd
误删除innodb ibdata数据文件 文件句柄 文件描述符 proc fd http://www.cnblogs.com/gomysql/p/3702216.html 提示:如果不小心通过 ...
- 文件描述符 VS 文件句柄
文件描述符 VS 文件句柄 文件描述符是标准 C 里用的,是 int 型的,比如调用 open 函数成功后会返回一个与当前文件相关联的 int 型数字. 文件句柄是 Windows 里用的,是 HAN ...
- 文件描述符FD的含义/文件句柄
使用sudo lsof -nP -iTCP -sTCP:LISTEN查看占用端口的程序;因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能 概念 ...
- Linux文件描述符与打开文件之间的区别(转载)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为: ...
- linux文件描述符--转载
转自:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录 ...
- Linux中的文件描述符与打开文件之间的关系
Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描 ...
- Linux下文件描述符
http://blog.csdn.net/kumu_linux/article/details/7877770 文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket.第一个打开的 ...
- Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列
http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件. ...
- [性能分析]linux文件描述符(转)
1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.l ...
- (转)Linux中的文件描述符
本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为 ...
随机推荐
- Android 11 后的应用数据和文件
Android应用数据的保存方式有四种,分别是应用专属存储空间.共享存储.偏好设置.数据库. 应用专属存储空间 应用专属存储空间:存放应用专属文件,主要包括两个空间,卸载后移除 内部存储空间:位于系统 ...
- (数据科学学习手札155)基于martin为在线地图构建字体切片服务
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,在之前的一篇文章(基于mart ...
- 从零开始使用 ROS CDK 搭建云上解决方案
作者: 金湛 前言 资源编排服务ROS(Resource Orchestration Service)是阿里云提供的一项简化云计算资源管理的服务.开发者和管理员可以编写模板,在模板中定义所需的阿里云资 ...
- 耗时三年开源的H5商城,生产级代码实战
waynboot-mall 商城项目是我从疫情开始初期着手准备开发的,到如今 2023 年底,已经过了 3 年多的时间. 从项目初期到现在,一个人持续迭代,修复漏洞,添加功能,经历了前端开发工具从 v ...
- [GDOIpj221D] 小学生计数题
第四题 小学生计数题 提交文件: counting.cpp 输入文件: counting.in 输出文件: counting.out 时间空间限制: 1 秒, 256 MB 作为 GDOI 的组题人, ...
- 项目实战接口开发SpringBoot
目录 一.springboot官方demo开发 二.使用SpringBoot开发get方法接口 三.一个要求携带cookie信息访问的get接口开发 四.需要携带参数的get请求两种开发方式 4.1 ...
- bash shell笔记整理——cat命令
cat命令的作用 简单来说cat命令用于查看文件内容,但是真正来说cat将给定的文件或者标准输入输出到标准输出中. 这个命令时会经常使用到的,不管是在shell脚本的编写还是linux运维测试中,ca ...
- Chrome扩展程序是如何进行消息传递的
大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. 一个复杂的 Chrome 扩展程序通常由 content_scripts,background,ac ...
- Spring Boot 2.x 到 3.2 的全面升级指南
Spring Framework 是一种流行的开源企业级框架,用于创建在 Java Virtual Machine (JVM) 上运行的独立.生产级应用程序.而Spring Boot 是一个工具,可以 ...
- 单位换算详解:bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算
当谈论计算机存储和数据传输时,"bit"(比特)和"Byte"(字节)是两个常见的术语,它们具有不同的含义和用途. 位(bit):"位"来自 ...
