在Linux编程世界中,不可能没听过文件描述符这个概念,我们操纵任何设备的时候,几乎都要通过它来达成的,它究竟是何方神圣呢?随我描述符科学家来一探究竟。...首先,我们在Linux下打开文件用的都是如下代码: int fd = open(... ...); 当然有同学可能会说,有时也可以用fopen(),但是fopen()只是标准IO对系统IO的封装,归根结底还是使用...open()来打开一个文件。...很多人就想当然地以为打开嘛,就跟在windows下双击一个文件,或者双击一个文件夹一样,就是一个动作而已,其实不然,常说的打开一个文件实际上最重要的是获取这个文件的描述符,描述符是用来表征这个文件的代表物...内核空间中有一堆数据结构表达一个文件的属性信息,但是用户空间看不见,只看见一个代表了这些信息的整数i,通常我们称之为文件描述符,对文件的读写和ioctl操作都是通过这个东东来达到的呢!
Linux标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误输出 ---- Linux系统将所有设备都当作文件来处理,而Linux...其实我们可以想象我们电脑的显示器和键盘在Linux系统中都被看作是文件,而它们都有相应的文件描述符与之对应。 其实我们与计算机之间的交互是我可以输入一些指令之后它给我一些输出。...1>&6 vincent@geek:~/test$ cat test i love linux shell!!!1234 上面的命令很有意思:我首先把文件描述符6指向test文件。...因为不像描述符1,所有的输出都会自然找它,然后看它是定向到显示器还是某个文件。所以当我们想找描述符6的时候我们要用&来引用它。...命令如下: cat /dev/null > test1 ---- Linux使用/tmp目录来存放不需要一直保留的文件,大多数Linux系统会在启动时自动删除/tmp目录中所有的文件。
利用宏与for循环特性自动关闭文件描述符,用来避免用户经常忘记关闭文件描述符的问题。
在Linux操作系统中,一切皆是文件—— "Everything is a file"。 如果要在Linux系统中编写操作文件的代码,需要借助文件描述符。...文件的索引——文件描述符(file descriptor): 文件描述符是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。...文件描述符在用户进程和内核之间的映射关系: Linux中查看文件描述符的指令:lsof(list open files) lsof可以打开的文件: 普通文件 目录 网络文件系统的文件 字符或设备文件...i --列出所有的网络连接 lsof -i tcp --列出所有tcp 网络连接信息 *Linux中出现“ Too many open files”报错,如何解决:...,非负整数是成功,-1是失败 whence在文件中的位置如图所示: 当文件不再被使用时,可以调用 close(int fd) 函数来关闭被打开的文件。
系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 65535 说明: 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max...查看当前系统使用的打开文件描述符数 # cat /proc/sys/fs/file-nr 1280 0 0 113986 说明:第一个数表示当前系统已分配的文件描述符数(文件句柄数),第二个数为分配后已释放的文件描述符数...(当前不再使用的文件描述符数),第三个数为最大文件描述符数,等于file-max。...配置可打开最大文件描述符 a) 永久配置 # vim /etc/sysctl.conf 在文件尾添加如下内容(假设目标大小为65535): fs.file-max=65535 确保配置立即生效,执行以下命令...进程可打开最大文件描述设置 查看进程可打开最大文件描述符: soft nofile # ulimit -n 65535 配置进程可打开最大文件描述符 a)永久配置 添加带背景色内容 # vim /
Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...)关闭,会发生什么现象呢?...,但是我们关闭1号文件描述符对应的文件后,会发生什么呢?...原因在于我们关闭1号文件,也就是进程默认打开的标准输出文件,而当我们再次打开log.txt文件时,由于文件描述符分配规则,1是没有被使用的最小的下标,此时1号文件描述符对应的文件就变为了log.txt文件...dup2原理: dup2函数的原理实际上就是通过拷贝的方式,修改原来文件描述符表中特定下标所指向的文件,这里需要注意一点的是,dup2函数在实现重定向时,会先将原有的文件描述符指向的对应的文件关闭,这样避免内存泄漏问题的出现
介绍在Linux系统中,fd命令是一条用于显示文件描述符(File Descriptor)的命令。文件描述符是操作系统用于跟踪和管理打开文件的整数值,它是对打开文件的引用。...选项fd命令支持以下常用选项:选项描述 -e 显示所有文件描述符的详细信息...-t 仅显示文件描述符的类型 -u 仅显示当前用户的文件描述符 -a 显示所有文件描述符...4.4 显示所有文件描述符的详细信息使用fd -e命令可以显示当前进程的所有文件描述符的详细信息,包括文件描述符编号、打开模式、文件路径等。...总结Linux fd命令是用于显示文件描述符的实用命令。通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。
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
Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。...就是 Linux 内核对于一个进程的描述,也可以称为「进程描述符」。...mm指向的是进程的虚拟内存,也就是载入资源和可执行文件的地方;files指针指向一个数组,这个数组里装着所有该进程打开的文件的指针。 二、文件描述符是什么 先说files,它是一个文件指针数组。...我们常说的「文件描述符」就是指这个文件指针数组的索引,所以程序的文件描述符默认情况下 0 是输入,1 是输出,2 是错误。...PS:不要忘了,Linux 中一切都被抽象成文件,设备也是文件,可以进行读和写。
Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。...就是 Linux 内核对于一个进程的描述,也可以称为「进程描述符」。...mm指向的是进程的虚拟内存,也就是载入资源和可执行文件的地方;files指针指向一个数组,这个数组里装着所有该进程打开的文件的指针。 二、文件描述符是什么 先说files,它是一个文件指针数组。...我们常说的「文件描述符」就是指这个文件指针数组的索引,所以程序的文件描述符默认情况下 0 是输入,1 是输出,2 是错误。 我们可以重新画一幅图: ?...到这里,你可能也看出「Linux 中一切皆文件」设计思路的高明了,不管是设备、另一个进程、socket 套接字还是真正的文件,全部都可以读写,统一装进一个简单的files数组,进程通过简单的文件描述符访问相应资源
最近由于机缘巧合,结合最近工作中遇到的一些问题,深入了解了文件描述符(File Descriptor,简称FD,以下使用 FD 称谓)。预计会有两到三篇关于 FD 的文章陆续出来。...概念定义 文件描述符 是 用来访问资源(文件,输入输出设备等)的一种抽象指示符。...文件描述符 是POSIX(Portable Operating System Interface)规范的组成部分 文件描述符 通常是非负整数,C 语言中使用int类型。...unlimited Questions 进程退出与 FD 关系 因为file descriptor table 存在于 PCB (进程控制块,Process Control Block) 中,进程退出后所有的...FD都需要关闭处理掉。
文件操作接口的使用 三、文件描述符 1、什么是文件描述符 2、文件描述符的分配规则 四、重定向 1、什么是重定向 2、dup2 系统调用 3、三种重定向的实现 五、Linux 下一切皆文件 六、缓冲区...并不是所有的这些文件都被打开了,那些没有被打开的文件被称为文件系统;今天我们只研究这些被打开的文件。...> # fd:目标文件对应的文件描述符 # int:函数返回值,关闭成功返回0,关闭失败返回-1; 文件打开方式 -文件打开方式 -含义 如果指定文件不存在 O_RDONLY 以只读形式打开 出错 O_WRONLY...,即真正意义上的关闭文件) 所以,文件描述符的分配规则是:从小到大依次搜寻,寻找未被使用的最小 fd 作为新打开文件的 fd。...3、缓冲区的位置 在之前的 进度条代码 中我们知道,我们谈论的所有缓冲区都不在操作系统内核中,而是位于用户级语言层面;实际上,对于C语言来说,缓冲区位于 FILE 结构体中,Linux 下,我们可以在
在Linux操作系统中,文件句柄(包括Socket句柄)、打开文件、文件指针、文件描述符的概念比较绕,而且windows的文件句柄又与此有何关联和区别?这一系列的问题是我们不得不面对的。...在linux系统中文件句柄(file handles)和文件描述符(file descriptor)是一个一一对应的关系(如果错误,欢迎指正),按照c语言的理解文件句柄是FILE*(fopen()返回)...打开文件(open files)包括文件句柄但不仅限于文件句柄,由于linux所有的事物都以文件的形式存在,要使用诸如共享内存、信号量、消息队列、内存映射等都会打开文件,但这些是不会占用文件句柄。...lsof输出割裂信息的意义如下: COMMAND:进程的名称 PID: 进程标识符 USER:进程所有者 FD:文件描述符,应用程序通过文件描述符识别该文件。...而文件描述符的个数为90: ? 7. 文件描述符(file descriptor) 对于linux而言,所有对设备和文件的操作都使用文件描述符来进行的。
环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制...【Linux】基础IO_文件操作 前言 在前文中学习了open函数,我们知道open函数的返回值就是文件描述符,本章将对文件描述符进行详细讲解。 文件描述符 文件描述符是什么?...Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...,但是我们关闭1号文件描述符对应的文件后,会发生什么呢?...原因在于我们关闭1号文件,也就是进程默认打开的标准输出文件,而当我们再次打开log.txt文件时,由于文件描述符分配规则,1是没有被使用的最小的下标,此时1号文件描述符对应的文件就变为了log.txt文件
文件描述符限制 文件描述符 Linux的核心思想之一就是”一切皆文件”。...即Linux中所有的内容都是以文件的形式保存和管理的,它为不同类型的文件提供了统一的操作接口,对于不同类型的文件,我们都可以使用fopen()/fclose()/fwrite()/fread()等对这些文件进行读写处理...文件描述符(文件句柄)是Linux内核为了高效管理已被打开的文件所创建的索引,它是一个非负整数,用于指代被打开的文件。文件打开后,所有对该文件的操作都通过文件描述符进行操作。...文件描述符是系统的重要资源,当打开过多文件时会出现把系统内存耗尽的情况,所以Linux提供了多种维度对文件描述符的使用上限进行限制,以避免该问题。...文件描述符限制 file-max file_max用于限制整个系统能够分配的文件描述符,即当前系统下所有用户下的所有进程,其分配的所有文件描述符之和不能超过该值。
在 32 位的 linux/unix 系统下,每个程序打开一个文件都会有一段 4G 的虚拟地址空间,这部分空间中,有1G是内核地址空间,3G是用户地址空间,这个概念我们在之前的文章中有介绍过,可参考 “...图片 图中右侧表示的,就是我们今天讨论的主题“文件描述符表”,其内部有0~1023个id可以提供用户申请分配,每当用户使用一个 open 操作打开一个文件时,都会返回一个文件描述符,比如如下代码:...int nRet = open("/dev/zero", O_RDONLY); 这句代码会在当前进程内核区文件描述符表中申请一个新的文件描述符赋值给nRet值,系统默认情况下会帮我们打开三个文件描述符,...我们open的文件将从第三个开始使用,所以nRet的返回值就是3。 而当我们将nRet使用close函数关闭时,3这个位置就被空闲出来了。...file 的值设定为2048了,这样我们每个程序就可以打开0~2047个文件描述符了(这种情况很少见)。
这个概念在类Unix系统叫做文件描述符, linux把所有东西都被看成是文件,比如文件、目录、进程、网络socket、各种硬件设备等 这个概念在Windows下 称之为句柄, 句柄是Windows下各种对象的标识符..., 比如文件、资源、菜单、光标、位图等 那么,现在你应该可以理解文件描述符的含义了 文件描述符 之于文件系统(操作系统中的一切都是文件描述符 可以使用文件描述符描述任何一个资源对象 就如同...其实说白了,就是文件描述符的实例,就是用来表示文件的一个指针/索引....显然不行,必须是运营商提供给你的 我们的文件描述符,也是如此,应用程序不应该创建自己的文件描述符 他的构造方法,只能创建一个无效的文件描述符 不应该创建自己的文件描述符,可以直接理解为:...具体的值是 0 1 2 ,这是操作系统层面的描述 在linux 中, 每个进程启动时都打开3个文件(linux 中一切都是文件): * 标准输入 0 * 标准输出 1 *
2-文件描述符 文件描述符在形式上是一个非负整数。本质上是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。 当程序打开一个现有文件或者创建一个文件时,内核会向进程返回一个文件描述符。...上面我们使用了也是它默认提供的 0,1,2 号文件描述符。另外我们还可以使用 3-8 的文件描述符,只是它们默认没有打开而已。...我们还可以创建自定义的新的文件描述符。...当我们设定的文件描述符不想使用时,还可以关闭它们: $ exec 4>&- $ cd /dev/fd;ls -Al;cd - 5-屏蔽输出 在上一节我们也说过,/dev/null 有时候很有用。...在 Linux 中有一个被称为“黑洞”的设备文件,所有导入它的数据都将被“吞噬”—— /dev/null 。
1.功能 shutdown 指令可以关闭所有程序,并依用户的需要,进行重启或关机操作。 使用 shutdown 时,在系统关机前,可以通知所有登录者系统将要关闭。...关机之前,所有进程都会受到 shutdown 指令所发送的关闭进程信号,然后向 init 程序发送信号,要求它改变运行等级(runlevel)。...Linux 系统有 7 个运行级别: 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动; 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆; 运行级别2:多用户状态...选项说明 -c cancel,其他用户可以取消目前正在执行的关机程序,或者Control-C终止shutdown程序 -k 仅仅向每个登录用户发出警告信息,并不真正关机 -f 重新启动时不执行fsck文件系统检查命令...; -F 重新启动时执行fsck文件系统检查命令; -h 关机(halt)或关闭电源(power off),至于选择哪一种取决于系统的关机脚本(有時候可以在 BIOS 中更改) -H 关机(halt
本文研究的主要是Linux中文件描述符fd与文件指针FILE*互相转换的相关内容,具体介绍如下。 1.文件描述符fd的定义:文件描述符在形式上是一个非负整数。...在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。.../a.out close: Bad file descriptor 没错,fclose在关闭文件指针的时候,内部其实也关闭了文件描述符(否则资源就泄露了),既然这里fp内部的文件描述符和fd是同一个,...当fp被关闭时,fd也被关闭了,再次关闭fd就会出现“损坏的文件描述符”错误。...继续查看fdopen的手册内容,可以看到”w”和”w+”在这里不会导致文件截断。 后一句也印证了我们前面的实验结果:文件描述符不会被复制,文件指针被关闭时文件描述符也会被关闭。
领取专属 10元无门槛券
手把手带您无忧上云