在Linux编程世界中,不可能没听过文件描述符这个概念,我们操纵任何设备的时候,几乎都要通过它来达成的,它究竟是何方神圣呢?随我描述符科学家来一探究竟。...首先,我们在Linux下打开文件用的都是如下代码: int fd = open(... ...); 当然有同学可能会说,有时也可以用fopen(),但是fopen()只是标准IO对系统IO的封装,归根结底还是使用...open()来打开一个文件。...很多人就想当然地以为打开嘛,就跟在windows下双击一个文件,或者双击一个文件夹一样,就是一个动作而已,其实不然,常说的打开一个文件实际上最重要的是获取这个文件的描述符,描述符是用来表征这个文件的代表物...内核空间中有一堆数据结构表达一个文件的属性信息,但是用户空间看不见,只看见一个代表了这些信息的整数i,通常我们称之为文件描述符,对文件的读写和ioctl操作都是通过这个东东来达到的呢!
Linux标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误输出 ---- Linux系统将所有设备都当作文件来处理,而Linux...其实我们可以想象我们电脑的显示器和键盘在Linux系统中都被看作是文件,而它们都有相应的文件描述符与之对应。 其实我们与计算机之间的交互是我可以输入一些指令之后它给我一些输出。...那么我们可以把上面表格中的文件描述符0理解为我和计算机交互时的输入,而这个输入默认是指向键盘的; 文件描述符1理解为我和计算机交互时的输出,而这个输出默认是指向显示器的;文件描述符2理解为我和计算机交互时...1>&6 vincent@geek:~/test$ cat test i love linux shell!!!1234 上面的命令很有意思:我首先把文件描述符6指向test文件。...命令如下: cat /dev/null > test1 ---- Linux使用/tmp目录来存放不需要一直保留的文件,大多数Linux系统会在启动时自动删除/tmp目录中所有的文件。
在Linux操作系统中,一切皆是文件—— "Everything is a file"。 如果要在Linux系统中编写操作文件的代码,需要借助文件描述符。...文件的索引——文件描述符(file descriptor): 文件描述符是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。...文件描述符就是内核为了高效管理已被打开的文件所创建的索引值。 文件描述符指向内核为每一个进程维护的打开文件记录表。当要处理文件时,将文件对应的文件描述符作为参数传给函数。...文件描述符在用户进程和内核之间的映射关系: Linux中查看文件描述符的指令:lsof(list open files) lsof可以打开的文件: 普通文件 目录 网络文件系统的文件 字符或设备文件...- O_TRUNC 如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断为0字节 [mode_t mode] : 文件权限,只有在创建文件时需要使用 return: 文件描述符
前言 在前文中学习了open函数,我们知道open函数的返回值就是文件描述符,本章将对文件描述符进行详细讲解。 文件描述符 文件描述符是什么?...Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...这也是为什么我们打开文件时,返回的文件描述符是从3开始,因为前面的0 1 2已经被占用了 一个文件可以在同一个进程中被打开对此,也就意味着不同的文件描述符,可能会指向同一个文件。...文件描述符分配规则 文件描述符的分配规则为从0开始,扫描文件描述符表中,没有被使用的数值最小的下标,作为新打开文件的文件描述符。...所以假如我们要将1号文件描述符的指向的文件修改为fd对应的文件,应该这样来写:dup2(fd,1),这就是输出重定向,当然输入重定向就是:dup2(fd,0)。
系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # 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系统中,fd命令是一条用于显示文件描述符(File Descriptor)的命令。文件描述符是操作系统用于跟踪和管理打开文件的整数值,它是对打开文件的引用。...在这个示例中,文件描述符0对应/dev/null,文件描述符1和2对应/dev/pts/1,文件描述符3对应/home/user/file.txt,文件描述符4对应/home/user/output.txt...以下是一个示例:$ fd -p0 r1 w2 w3 rw4 w在这个示例中,文件描述符0以只读(r)模式打开,文件描述符1和2以写入(w)模式打开,文件描述符3以读写(rw...file在这个示例中,文件描述符0、1和2是字符设备(character device)类型的文件描述符,文件描述符3和4是普通文件(regular file)类型的文件描述符。...总结Linux fd命令是用于显示文件描述符的实用命令。通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。
因为C语言默认会打开三个输入输出流, 标准输入stdin 标准输出stdout 标准错误stderr 文件描述符就是从0开始的小整数。...所以,只要拿着文件描述符,就可以找到对应的文件 。 Linux中一切皆文件,所以0,1,2可以代表键盘,显示器。 在OS内,系统在访问文件的时候,只认文件描述符fd。...read的返回值:>0 :读取到的字节数 =0:已经读取到文件末尾。 文件描述符的分配规则 因为文件描述符的0、1、2默认是打开的,所以这里结果是3。...如果我们先把描述符0关了再打开新文件会怎样呢? 如果我们把2先关了 ,这时候结果就是2了。...由于我们先关闭了文件描述符1,所以此时log.txt的文件描述符就是1。
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
标准输入、标准输出和标准错误是最常用的文件描述符,其对应的值为 0、1 和 2,具体含义和使用说明如下: 文件描述符的含义 标准输入(stdin) 描述符: 0 用途: 接收输入数据,通常是来自键盘的用户输入...小结 文件描述符 0、1 和 2 用于表示标准输入、标准输出和标准错误,它们在 Linux 等类 Unix 系统中是处理输入输出的基础。通过合理地使用它们,可以方便地进行 I/O 操作和错误处理。...文件描述符总结 Linux中的文件描述符总结如下: 定义与用途: 文件描述符是内核为了高效管理已被打开的文件所创建的索引,是一个非负整数。...分配规则: 当进程启动时,默认会打开三个文件描述符:标准输入(stdin,文件描述符为0)、标准输出(stdout,文件描述符为1)、标准错误(stderr,文件描述符为2)。...一切皆文件: 在Linux下,一切皆文件,包括硬件设备、网络连接等,都可以通过文件描述符进行访问和操作。
Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。...就是 Linux 内核对于一个进程的描述,也可以称为「进程描述符」。...mm指向的是进程的虚拟内存,也就是载入资源和可执行文件的地方;files指针指向一个数组,这个数组里装着所有该进程打开的文件的指针。 二、文件描述符是什么 先说files,它是一个文件指针数组。...我们常说的「文件描述符」就是指这个文件指针数组的索引,所以程序的文件描述符默认情况下 0 是输入,1 是输出,2 是错误。...,程序想读取数据的时候就会去files[0]读取,所以我们只要把files[0]指向一个文件,那么程序就会从这个文件中读取数据,而不是从键盘: 同理,输出重定向就是把files[1]指向一个文件,那么程序的输出就不会写入到显示器
Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。...就是 Linux 内核对于一个进程的描述,也可以称为「进程描述符」。...我们常说的「文件描述符」就是指这个文件指针数组的索引,所以程序的文件描述符默认情况下 0 是输入,1 是输出,2 是错误。 我们可以重新画一幅图: ?...明白了这个原理,输入重定向就很好理解了,程序想读取数据的时候就会去files[0]读取,所以我们只要把files[0]指向一个文件,那么程序就会从这个文件中读取数据,而不是从键盘: ?...到这里,你可能也看出「Linux 中一切皆文件」设计思路的高明了,不管是设备、另一个进程、socket 套接字还是真正的文件,全部都可以读写,统一装进一个简单的files数组,进程通过简单的文件描述符访问相应资源
文件描述符限制 文件描述符 Linux的核心思想之一就是”一切皆文件”。...文件描述符(文件句柄)是Linux内核为了高效管理已被打开的文件所创建的索引,它是一个非负整数,用于指代被打开的文件。文件打开后,所有对该文件的操作都通过文件描述符进行操作。...文件描述符是系统的重要资源,当打开过多文件时会出现把系统内存耗尽的情况,所以Linux提供了多种维度对文件描述符的使用上限进行限制,以避免该问题。...sysctl -p file-nr dailybuild@9.77.10.46:~>cat /proc/sys/fs/file-nr 1952 0 3043564 file-nr是一个只读文件...,它记录了当前系统中文件描述符的使用情况,第一个(6144)是系统已经分配的文件描述符数;第二个(0)是系统已经分配但未使用的文件描述符数;第三个是内核最大能分配的文件描述符数,与file-max一致。
在 32 位的 linux/unix 系统下,每个程序打开一个文件都会有一段 4G 的虚拟地址空间,这部分空间中,有1G是内核地址空间,3G是用户地址空间,这个概念我们在之前的文章中有介绍过,可参考 “...图片 图中右侧表示的,就是我们今天讨论的主题“文件描述符表”,其内部有0~1023个id可以提供用户申请分配,每当用户使用一个 open 操作打开一个文件时,都会返回一个文件描述符,比如如下代码:...int nRet = open("/dev/zero", O_RDONLY); 这句代码会在当前进程内核区文件描述符表中申请一个新的文件描述符赋值给nRet值,系统默认情况下会帮我们打开三个文件描述符,...0代表是标准输入、1代表是标准输出、2代表标准Error。...file 的值设定为2048了,这样我们每个程序就可以打开0~2047个文件描述符了(这种情况很少见)。
这个概念在类Unix系统叫做文件描述符, linux把所有东西都被看成是文件,比如文件、目录、进程、网络socket、各种硬件设备等 这个概念在Windows下 称之为句柄, 句柄是Windows下各种对象的标识符..., 比如文件、资源、菜单、光标、位图等 那么,现在你应该可以理解文件描述符的含义了 文件描述符 之于文件系统(操作系统中的一切都是文件描述符 可以使用文件描述符描述任何一个资源对象 就如同...显然不行,必须是运营商提供给你的 我们的文件描述符,也是如此,应用程序不应该创建自己的文件描述符 他的构造方法,只能创建一个无效的文件描述符 不应该创建自己的文件描述符,可以直接理解为:...具体的值是 0 1 2 ,这是操作系统层面的描述 在linux 中, 每个进程启动时都打开3个文件(linux 中一切都是文件): * 标准输入 0 * 标准输出 1 *...initializeSystemClass 方法的关键部位 以及 本地的setIn0 setOut0 setErr0 initializeSystemClass 方法对于这块来说,主要就是
最近由于机缘巧合,结合最近工作中遇到的一些问题,深入了解了文件描述符(File Descriptor,简称FD,以下使用 FD 称谓)。预计会有两到三篇关于 FD 的文章陆续出来。...概念定义 文件描述符 是 用来访问资源(文件,输入输出设备等)的一种抽象指示符。...文件描述符 是POSIX(Portable Operating System Interface)规范的组成部分 文件描述符 通常是非负整数,C 语言中使用int类型。...{ int pipeFds[2]; pipe(pipeFds); printf("%d\t\t\t %p\t\t\t Pipe's read end\n", pipeFds[0]..., fdopen(pipeFds[0], "r")); printf("%d\t\t\t %p\t\t\t Pipe's write end\n", pipeFds[1], fdopen(pipeFds
() 的时候,都离不开这个文件描述符参数,所以它肯定和文件之间有着密切关联 下面看看这段代码,看看不同文件打开时候的文件描述符分别是什么: #include #include...fd 不是 0 或者 1 呢,而是从 3 开始 ❓❓❓ 还记得我们曾经学C语言的文件操作时候说过,每次我们打开一个 C 程序或者这么说,Linux 进程默认情况下会有 3 个缺省打开的文件描述符,默认会打开三个标准输入输出流...文件描述符 fd(file descripter) 一、什么是fd ❓ 简单地说,文件描述符 fd 的本质就是数组的下标,若一个文件被打开,那么肯定会有一个相对应的文件描述符字段给到该文件,用于标识该文件...而每次 linux 进程都会默认生成三个文件描述符分别指向 stdin、stdout、stderr,下标分别为 0、1、2,这也是为什么我们每次打开或者创建一个新文件的时候,fd 都是从 3 开始的原因...所以,只要拿着文件描述符,就可以找到对应的文件,找到文件后就可以对文件进行操作了!
环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制...【Linux】基础IO_文件操作 前言 在前文中学习了open函数,我们知道open函数的返回值就是文件描述符,本章将对文件描述符进行详细讲解。 文件描述符 文件描述符是什么?...Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...这也是为什么我们打开文件时,返回的文件描述符是从3开始,因为前面的0 1 2已经被占用了 一个文件可以在同一个进程中被打开对此,也就意味着不同的文件描述符,可能会指向同一个文件。...文件描述符分配规则 文件描述符的分配规则为从0开始,扫描文件描述符表中,没有被使用的数值最小的下标,作为新打开文件的文件描述符。
Linux 2.6 always reports 0 as the number of free file handles – this is not an error, it just means that...该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都有三个文件描述符:0,1,2,分别表示标准输入、标准输出、错误流。所以大多数应用程序所打开的文件的FD都是从3开始的。...而文件描述符的个数为90: ? 7. 文件描述符(file descriptor) 对于linux而言,所有对设备和文件的操作都使用文件描述符来进行的。...通常,一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理。这3个文件分别对应文件描述符为0、1和2(宏STD_FILENO、STDOUT_FILENO和STDERR_FILENO)。...系统为每一个进程维护了一个文件描述符表,该表的值都是从0开始的,所以在不同的进程中你会看到相同的文件描述符,这种情况下相同文件描述符有可能指向同一个文件,也有可能指向不同的文件。
2-文件描述符 文件描述符在形式上是一个非负整数。本质上是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。 当程序打开一个现有文件或者创建一个文件时,内核会向进程返回一个文件描述符。...比如,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。...上面我们使用了也是它默认提供的 0,1,2 号文件描述符。另外我们还可以使用 3-8 的文件描述符,只是它们默认没有打开而已。...你可以使用下面命令查看当前 Shell 进程中打开的文件描述符: $ ls -Al /dev/fd/ total 0 lrwx------ 1 yzpeng yzpeng 64 Apr 30 12:59...我们还可以创建自定义的新的文件描述符。
我们可以用write配合文件描述符在显示器上打印。 文件描述符就是从0开始的小整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件。于是就有了file结构体。...所以,只要拿着文件描述符,就可以找到对应的文件 。 Linux中一切皆文件,所以0,1,2可以代表键盘,显示器。 在OS内,系统在访问文件的时候,只认文件描述符fd。...进入fd目录,可以看到默认的文件描述符0、1、2是打开的。 打开的设备是dev目录下的pts/3。...read的返回值:>0 :读取到的字节数 =0:已经读取到文件末尾。 文件描述符的分配规则 因为文件描述符的0、1、2默认是打开的,所以这里结果是3。...如果我们先把描述符0关了再打开新文件会怎样呢? 结果是0。 如果我们把2先关了 ,这时候结果就是2了。
领取专属 10元无门槛券
手把手带您无忧上云