首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux编程(文件描述符

Linux编程世界中,不可能没听过文件描述符这个概念,我们操纵任何设备时候,几乎都要通过它来达成,它究竟是何方神圣呢?随我描述符科学家来一探究竟。...首先,我们在Linux下打开文件都是如下代码: int fd = open(... ...); 当然有同学可能会说,有时也可以用fopen(),但是fopen()只是标准IO对系统IO封装,归根结底还是使用...open()来打开一个文件。...很多人就想当然地以为打开嘛,就跟在windows下双击一个文件,或者双击一个文件夹一样,就是一个动作而已,其实不然,常说打开一个文件实际上最重要是获取这个文件描述符描述符是用来表征这个文件代表物...内核空间中有一堆数据结构表达一个文件属性信息,但是用户空间看不见,只看见一个代表了这些信息整数i,通常我们称之为文件描述符,对文件读写和ioctl操作都是通过这个东东来达到呢!

1.7K20

Linux 文件描述符详解

Linux标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误输出 ---- Linux系统将所有设备都当作文件来处理,而Linux...其实我们可以想象我们电脑显示器和键盘在Linux系统中都被看作是文件,而它们都有相应文件描述符与之对应。 其实我们与计算机之间交互是我可以输入一些指令之后它给我一些输出。...1>&6 vincent@geek:~/test$ cat test i love linux shell!!!1234 上面的命令很有意思:我首先把文件描述符6指向test文件。...最后,我们用&来找到文件描述符3指向目标文件,也就是显示器,然后我们修改了文件描述符1指向文件到显示器。因此,最后一个echo命令会自然文件描述符1然后输出到显示器上。...命令如下: cat /dev/null > test1 ---- Linux使用/tmp目录来存放不需要一直保留文件,大多数Linux系统会在启动时自动删除/tmp目录中所有的文件

2.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux内核编程--文件描述符

    Linux操作系统中,一切皆是文件—— "Everything is a file"。 如果要在Linux系统中编写操作文件代码,需要借助文件描述符。...文件索引——文件描述符(file descriptor): 文件描述符是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。...文件描述符就是内核为了高效管理已被打开文件所创建索引值。 文件描述符指向内核为每一个进程维护打开文件记录表。当要处理文件时,将文件对应文件描述符作为参数传给函数。...文件描述符在用户进程和内核之间映射关系: Linux中查看文件描述符指令:lsof(list open files) lsof可以打开文件: 普通文件 目录 网络文件系统文件 字符或设备文件...标准提供默认文件描述符: 操作系统提供四种常见I/O文件操作函数 (fd表示“文件描述符”): fd = open(pathname, flags, mode) numread = read(

    2.8K10

    调整进程最大linux文件描述符

    1.介绍 ---- ulimit 命令提供了针对 shell和或由该 shell 启动进程占用资源控制。  持久化修改生效是在/etc/security/limits.conf中进行数据写入....写入格式为: domain:用户名/用户组名/其他(查看man limits.conf) type: hard / soft ,分别指实际最大值类型和预警值类型...maxsyslogins/priority/locks/sigpending/msgqueue/nice/rtprio/ value: -1/unlimited/infinity/ 具体值 要修改最大文件描述符重点在于...item和value 2.修改 ---- 2.1 先查看当前用户最大文件描述符数量: 1 ulimit -Hn 2 ulimit -Sn 2.2 修改当前用户进程最大文件描述符数量: 1 vim...在末尾添加 3 user soft nofile 4096  (user为用户名) 4 user hard nofile 10240 5 保存后退出登录再重新登录 6 使用上面的命令查看新limit

    3.1K50

    Linux】基础IO_文件描述符

    前言 在前文中学习了open函数,我们知道open函数返回值就是文件描述符,本章将对文件描述符进行详细讲解。 文件描述符 文件描述符是什么?...内存中一定是存在多个被打开文件,那么如何知道哪些文件是哪个进程打开呢?这里就谈到了文件描述符。如下: 简单来说:文件描述符就是一个进程与该进程所打开文件建立索引关系数组(文件描述符表)下标。...通过文件描述符,也就是该进程对应文件描述符表所对应下标。就可以找到该进程所打开各个文件。 我们再来看如下现象: 为什么文件描述符是从3开始呢?...Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...文件描述符分配规则 文件描述符分配规则为从0开始,扫描文件描述符表中,没有被使用数值最小下标,作为新打开文件文件描述符

    1.4K30

    Linux Linux下最大文件描述符设置

    系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 65535 说明: 所有进程打开文件描述符数不能超过/proc/sys/fs/file-max...查看当前系统使用打开文件描述符数 # cat /proc/sys/fs/file-nr 1280 0 0 113986 说明:第一个数表示当前系统已分配文件描述符数(文件句柄数),第二个数为分配后已释放文件描述符数...(当前不再使用文件描述符数),第三个数为最大文件描述符数,等于file-max。...如上,表示进程可打开最大文件描述符soft limit为65535,hard limit为65535 3、需要注销重新登录配置才会生效 4、/proc/sys/fs/nr_open是单个进程可分配最大文件数...单个进程打开文件描述符数不能超过user limit中nofilesoft limit c. nofilesoft limit不能超过其hard limit d.

    6.4K42

    Linux 进程、线程、文件描述符底层原理

    Linux进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令底层工作原理,最后我们从操作系统角度看看为什么说线程和进程基本没有区别。...mm指向是进程虚拟内存,也就是载入资源和可执行文件地方;files指针指向一个数组,这个数组里装着所有该进程打开文件指针。 二、文件描述符是什么 先说files,它是一个文件指针数组。...我们常说文件描述符」就是指这个文件指针数组索引,所以程序文件描述符默认情况下 0 是输入,1 是输出,2 是错误。...如果我们写程序需要其他资源,比如打开一个文件进行读写,这也很简单,进行系统调用,让内核把文件打开,这个文件就会被放到files第 4 个位置,对应文件描述符 3: 明白了这个原理,输入重定向就很好理解了...、另一个进程、socket 套接字还是真正文件,全部都可以读写,统一装进一个简单files数组,进程通过简单文件描述符访问相应资源,具体细节交于操作系统,有效解耦,优美高效。

    1.4K10

    Linux 进程、线程、文件描述符底层原理

    Linux进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令底层工作原理,最后我们从操作系统角度看看为什么说线程和进程基本没有区别。...mm指向是进程虚拟内存,也就是载入资源和可执行文件地方;files指针指向一个数组,这个数组里装着所有该进程打开文件指针。 二、文件描述符是什么 先说files,它是一个文件指针数组。...我们常说文件描述符」就是指这个文件指针数组索引,所以程序文件描述符默认情况下 0 是输入,1 是输出,2 是错误。 我们可以重新画一幅图: ?...如果我们写程序需要其他资源,比如打开一个文件进行读写,这也很简单,进行系统调用,让内核把文件打开,这个文件就会被放到files第 4 个位置,对应文件描述符 3: ?...到这里,你可能也看出「Linux 中一切皆文件」设计思路高明了,不管是设备、另一个进程、socket 套接字还是真正文件,全部都可以读写,统一装进一个简单files数组,进程通过简单文件描述符访问相应资源

    2.5K30

    Linux显示文件描述符命令:fd

    介绍在Linux系统中,fd命令是一条用于显示文件描述符(File Descriptor)命令。文件描述符是操作系统用于跟踪和管理打开文件整数值,它是对打开文件引用。...4.3 显示文件描述符类型使用fd -t命令可以显示当前进程文件描述符类型。...4.4 显示所有文件描述符详细信息使用fd -e命令可以显示当前进程所有文件描述符详细信息,包括文件描述符编号、打开模式、文件路径等。...总结Linux fd命令是用于显示文件描述符实用命令。通过fd命令,我们可以查看当前进程所打开文件描述符及其相关信息,包括文件描述符编号、打开模式、文件路径等。...通过结合不同选项,可以灵活地控制显示信息内容。在日常系统管理和开发工作中,熟悉和掌握fd命令使用将大大提高工作效率。希望本文对你理解和使用Linux fd命令有所帮助。

    2.6K20

    Linux】————(文件描述符、重定向、文件缓冲区……)

    所以,只要拿着文件描述符,就可以找到对应文件Linux中一切皆文件,所以0,1,2可以代表键盘,显示器。 在OS内,系统在访问文件时候,只认文件描述符fd。...read返回值:>0 :读取到字节数 =0:已经读取到文件末尾。 文件描述符分配规则 ​ ​ 因为文件描述符0、1、2默认是打开,所以这里结果是3。...从上面的结果可以得出结论, 文件描述符分配规则:在files_struct数组当中,找到当前没有被使用最小一个下标,作为新文件描述符。...由于我们先关闭了文件描述符1,所以此时log.txt文件描述符就是1。...使用 dup2 系统调用 ​ ​ dup2可以在底层帮我们做两个文件描述符对应数组内容之间值拷贝 。 本质是文件描述符下标对应内容拷贝。

    7310

    linux17-详说linux重定向与文件描述符

    部分内容参考:Linux 基础入门(新版) - 实验楼[1] 1-linux输入与输出 Linux 默认提供了三个特殊设备,用于终端显示和输出,分别为stdin(标准输入,对应于你在终端输入),stdout...2-文件描述符 文件描述符在形式上是一个非负整数。本质上是一个索引值,指向内核为每一个进程所维护该进程打开文件记录表。 当程序打开一个现有文件或者创建一个文件时,内核会向进程返回一个文件描述符。...上面我们使用了也是它默认提供 0,1,2 号文件描述符。另外我们还可以使用 3-8 文件描述符,只是它们默认没有打开而已。...我们还可以创建自定义文件描述符。...在 Linux 中有一个被称为“黑洞”设备文件,所有导入它数据都将被“吞噬”—— /dev/null 。

    1.6K30

    Linux文件操作文件描述符重定向缓冲区

    文件操作接口使用 三、文件描述符 1、什么是文件描述符 2、文件描述符分配规则 四、重定向 1、什么是重定向 2、dup2 系统调用 3、三种重定向实现 五、Linux 下一切皆文件 六、缓冲区...因此,只要拿着文件描述符,就可以找到对应文件。 所以,文件描述符是从0开始小整数,其本质是文件描述符表中数组下标。...2、文件描述符分配规则 现在我们知道了文件描述符是什么,那么文件描述符是如何进行分配呢?...从运行结果可以看到,文件描述符是连续分配且依次增大,这也很合理,因为文件描述符本质上是数组下标,而连续增长正好是数组下标的特性;但是这里有一个很奇怪地方 – 文件描述符是从3开始,那么0、1、2号下标呢...)写入到stdout中 } close(fd); return 0; } ---- 五、Linux 下一切皆文件 在刚开始学习 Linux 时候,我们就说 Linux 下一切皆文件

    4K00

    文件描述符详解

    在 32 位 linux/unix 系统下,每个程序打开一个文件都会有一段 4G 虚拟地址空间,这部分空间中,有1G是内核地址空间,3G是用户地址空间,这个概念我们在之前文章中有介绍过,可参考 “...“文件描述符表”,表格式抽象成下图样子。...图片 图中右侧表示,就是我们今天讨论主题“文件描述符表”,其内部有0~1023个id可以提供用户申请分配,每当用户使用一个 open 操作打开一个文件时,都会返回一个文件描述符,比如如下代码:...int nRet = open("/dev/zero", O_RDONLY); 这句代码会在当前进程内核区文件描述符表中申请一个新文件描述符赋值给nRet值,系统默认情况下会帮我们打开三个文件描述符,...file 值设定为2048了,这样我们每个程序就可以打开0~2047个文件描述符了(这种情况很少见)。

    17710

    文件描述符限制

    文件描述符限制 文件描述符 Linux核心思想之一就是”一切皆文件”。...在Linux中,普通文件、目录、链接文件、字符设备、块设备以及网络套接字等等都以文件形式存在。...文件描述符文件句柄)是Linux内核为了高效管理已被打开文件所创建索引,它是一个非负整数,用于指代被打开文件文件打开后,所有对该文件操作都通过文件描述符进行操作。...文件描述符是系统重要资源,当打开过多文件时会出现把系统内存耗尽情况,所以Linux提供了多种维度对文件描述符使用上限进行限制,以避免该问题。...,它记录了当前系统中文件描述符使用情况,第一个(6144)是系统已经分配文件描述符数;第二个(0)是系统已经分配但未使用文件描述符数;第三个是内核最大能分配文件描述符数,与file-max一致。

    1.8K20

    解读文件描述符

    最近由于机缘巧合,结合最近工作中遇到一些问题,深入了解了文件描述符(File Descriptor,简称FD,以下使用 FD 称谓)。预计会有两到三篇关于 FD 文章陆续出来。...首篇也就是这篇,作为基础篇,介绍一些关于通用 FD 内容知识。 概念定义 文件描述符 是 用来访问资源(文件,输入输出设备等)一种抽象指示符。...文件描述符 是POSIX(Portable Operating System Interface)规范组成部分 文件描述符 通常是非负整数,C 语言中使用int类型。...当我们尝试打开文件/path/myfile.txt 1.从inode table 中查找到对应文件节点 2.根据用户代码open一些参数(比如读写权限等)在open file table 中创建...同一路径 与 FD 关系 同一文件,多次打开,FD值不同 同一文件,读写模式不同打开,FD值也不同 打开文件过多会怎样 open返回值会出现-1 通常会导致进程无法进行,甚至是崩溃 示例验证代码 如下代码可以验证上述问题中结论

    1.5K31

    文件句柄与文件描述符

    Linux操作系统中,文件句柄(包括Socket句柄)、打开文件文件指针、文件描述符概念比较绕,而且windows文件句柄又与此有何关联和区别?这一系列问题是我们不得不面对。...在linux系统中文件句柄(file handles)和文件描述符(file descriptor)是一个一一对应关系(如果错误,欢迎指正),按照c语言理解文件句柄是FILE*(fopen()返回)...为什么Linux内核对文件句柄数、线程和进程最大打开数进行了限制?以及如果我们把它调太大,会产生什么样后果?...在linux环境下,任何事物都以文件形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。...而文件描述符个数为90: ? 7. 文件描述符(file descriptor) 对于linux而言,所有对设备和文件操作都使用文件描述符来进行

    5K70

    012 修改 hosts 文件原理是什么

    DNS (Domain Name Server) 作用就是进行 IP 解析,把域名对应到 IP。在 Great FireWall 5 种封锁方法中,有一种简单而效果很好方法是 DNS 污染。...GFW 会对 DNS 解析过程进行干扰,这会使对某些被干扰域名返回一个错误 IP 地址给你主机,使你无法正确连接到你要服务器上读取正确信息。Hosts 文件本来是用来提高解析效率。...在进行 DNS 请求以前,系统会先检查自己 Hosts 文件中是否有这个地址映射关系,如果有则调用这个 IP 地址映射,如果没有再向已知 DNS 服务器提出域名解析。...也就是说 Hosts 请求级别比 DNS 高。当你 Hosts 文件里面有对应 IP 时,它就会直接访问那个 IP,而不用通过 DNS。...所以,当我们直接将 Google、Twitter、Facebook 之类 IP 放入 Hosts 文件后,就可以跳过 DNS 解析这一步,直接就行 IP 访问,不受 GFW DNS 污染干扰了。

    2.7K50

    Linux】基础IO_文件描述符与重定向

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制...【Linux】基础IO_文件操作 前言 在前文中学习了open函数,我们知道open函数返回值就是文件描述符,本章将对文件描述符进行详细讲解。 文件描述符 文件描述符是什么?...通过文件描述符,也就是该进程对应文件描述符表所对应下标。就可以找到该进程所打开各个文件。 我们再来看如下现象: 为什么文件描述符是从3开始呢?...Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...文件描述符分配规则 文件描述符分配规则为从0开始,扫描文件描述符表中,没有被使用数值最小下标,作为新打开文件文件描述符

    27430

    linux文件描述符和epoll工作模式理解

    1.文件描述符 ---- linux文件描述符是一个用于表述指向文件引用抽象化概念(在windows下是HANDLE句柄)....文件描述符在形式上是一个非负整数值.但实际上,他是一个索引值,指向系统内核为每个进程维护一张记录表. 在这张记录表上记录每个进程打开文件对应文件结构体信息. ...那么也就是说,文件描述符不存在事件这一说法,文件描述符本身不会产生事件,但文件描述符对应文件可能会因为modify而产生事件....就可以被epoll正确捕捉到. epoll可以在两种模式下来捕捉监听文件描述符产生事件..... 3.应用方式 ---- 目前接触过应用中如果使用ET模式,文件描述符必须设为非阻塞模式以避免由于一个文件阻塞读/阻塞写操作把处理多个文件描述符任务饿死,比如在对socket链接进行事件监听时

    1.5K71

    FileDescriptor文件描述符 标准输入输出错误 文件描述符

    这个概念在类Unix系统叫做文件描述符, linux把所有东西都被看成是文件,比如文件、目录、进程、网络socket、各种硬件设备等 这个概念在Windows下 称之为句柄, 句柄是Windows下各种对象标识符..., 比如文件、资源、菜单、光标、位图等 那么,现在你应该可以理解文件描述符含义了 文件描述符  之于文件系统(操作系统中一切都是文件描述符 可以使用文件描述符描述任何一个资源对象 就如同...其实说白了,就是文件描述符实例,就是用来表示文件一个指针/索引....显然不行,必须是运营商提供给你 我们文件描述符,也是如此,应用程序不应该创建自己文件描述符构造方法,只能创建一个无效文件描述符 不应该创建自己文件描述符,可以直接理解为:...具体值是 0  1   2  ,这是操作系统层面的描述 在linux 中, 每个进程启动时都打开3个文件(linux 中一切都是文件):  * 标准输入  0 * 标准输出  1 *

    1.9K20
    领券