首页
学习
活动
专区
工具
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指向的文件到test文件。...命令如下: 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.7K10

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。...配置可打开最大文件描述符 a) 永久配置 # vim /etc/sysctl.conf 在文件尾添加如下内容(假设目标大小为65535): fs.file-max=65535 确保配置立即生效,执行以下命令...进程可打开最大文件描述设置 查看进程可打开最大文件描述符: soft nofile # ulimit -n 65535 配置进程可打开最大文件描述符 a)永久配置 添加带背景色内容 # vim /

5.8K42

Linux】基础IO_文件描述符

内存中一定是存在多个被打开的文件的,那么如何知道哪些文件是哪个进程打开的呢?这里就谈到了文件描述符。如下: 简单来说:文件描述符就是一个进程与该进程所打开文件建立索引关系的数组(文件描述符)下标。...通过文件描述符,也就是该进程对应的的文件描述符所对应的下标。就可以找到该进程所打开的各个文件。 我们再来看如下现象: 为什么文件描述符是从3开始的呢?...Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...文件描述符分配规则 文件描述符的分配规则为从0开始,扫描文件描述符中,没有被使用的数值最小的下标,作为新打开文件文件描述符。...这就是重定向的原理,即:在上层无法感知的情况下,修改底层进程的文件描述符中,特定下标的指向。

99730

Linux】基础IO --- 系统级文件接口、文件描述符文件控制块、fd分配规则、重定向…

read从一个文件描述符中读取内容,然后将其存到缓冲区buf里面,如果read调用成功,则会返回read读取的字节数,返回0代读到了文件的结尾。 2....内存中文件描述符文件描述符文件控制块,进程控制块的关系如下图所示,文件描述符,说白了就是一个存储指向文件控制块的指针的指针数组,而文件描述符就是这个指针数组的索引,进程控制块中会有一个指向文件描述符的指针...实际上文件描述符在分配时,会从文件描述符中的指针数组中,从小到大按照顺序找最小的且没有被占用的fd来进行分配,自然而然关闭0时,0对应存储的地址就会由stdin改为新打开的文件的地址,所以打印新的文件的...子进程的重定向是不会影响父进程的,因为进程具有独立性,在创建子进程时,会将父进程的pcb拷贝一份给子进程,除pcb外,mm_struct(虚拟地址空间),页文件描述符等其实也都需要给子进程拷贝一份...六、看看Linux内核源代码是怎么说的 1.下面是文件描述符的固定个数 2.下面是文件描述符的扩展个数 3.下面是云服务器下的文件描述符的最多打开文件个数。

1.1K30

中断描述符

Hi~朋友,码字不易,点点关注呗 摘要 中断描述符 中断描述符寄存器 中断细节 中断错误码 中断描述符 什么是中断描述符? 中断描述符是保护模式下用于存储中断处理程序的数据结构。...CPU在接收到中断时,会根据中断向量在中断描述符中检索对应的描述符。 中断描述符中的描述符有哪些类型?...中断描述中的主要包含以下类型: 任务门描述符 中断门描述符 陷阱门描述符 调用门描述符 任务门描述符结构如下: 任务门需要和任务状态段(TSS)配合使用,这是Intel处理器在硬件一级提供的任务切换机制...任务门可以存在于全局描述符GDT、局部描述符LDT以及中断描述符IDT中。...中断描述符寄存器 如何找到中断描述符

71240

全局描述符

Hi~朋友,码字不易,点点关注呗 摘要 什么是全局描述符 什么是段描述符 GDTR寄存器 段选择子 什么是全局描述符 进入保护模式以后,数据段、代码段等内存段不再是通过段寄存器获得段基址就可以使用,...我们需要把段定义好,并且登记好,全局描述符便是用来记录这些段信息的数据结构。...寄存器 GDTR寄存器 有了段描述符以后,我们可以清楚的定义各种内存段,并且保存到了全局描述符中。...全局描述符也是存放在内存中,需要使用GDTR寄存器来指向它,这样CPU才能知道怎样找到全局描述符。 GDTR寄存器(48位)存储的数据格式如下: ?...由于段寄存器是16位,因此选择子的大小也为16位,段选择子的低2位含义是请求特权级(RPL);第3位TI如果为0表示从GDT中查找段描述符,如果为1表示在局部描述符(LDT)中查找段描述;剩余的13位用来索引描述符

89250

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

介绍在Linux系统中,fd命令是一条用于显示文件描述符(File Descriptor)的命令。文件描述符是操作系统用于跟踪和管理打开文件的整数值,它是对打开文件的引用。...0、1和2是字符设备(character device)类型的文件描述符文件描述符3和4是普通文件(regular file)类型的文件描述符。...4.4 显示所有文件描述符的详细信息使用fd -e命令可以显示当前进程的所有文件描述符的详细信息,包括文件描述符编号、打开模式、文件路径等。...总结Linux fd命令是用于显示文件描述符的实用命令。通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。...希望本文对你理解和使用Linux fd命令有所帮助。如需进一步了解命令的更多细节和用法,请查阅相关的文档和参考资料。

2.1K20

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

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

2.3K30

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

Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。...就是 Linux 内核对于一个进程的描述,也可以称为「进程描述符」。...mm指向的是进程的虚拟内存,也就是载入资源和可执行文件的地方;files指针指向一个数组,这个数组里装着所有该进程打开的文件的指针。 二、文件描述符是什么 先说files,它是一个文件指针数组。...我们常说的「文件描述符」就是指这个文件指针数组的索引,所以程序的文件描述符默认情况下 0 是输入,1 是输出,2 是错误。...PS:不要忘了,Linux 中一切都被抽象成文件,设备也是文件,可以进行读和写。

1.3K10

解读文件描述符

最近由于机缘巧合,结合最近工作中遇到的一些问题,深入了解了文件描述符(File Descriptor,简称FD,以下使用 FD 称谓)。预计会有两到三篇关于 FD 的文章陆续出来。...概念定义 文件描述符 是 用来访问资源(文件,输入输出设备等)的一种抽象指示符。...文件描述符 是POSIX(Portable Operating System Interface)规范的组成部分 文件描述符 通常是非负整数,C 语言中使用int类型。...Standard output 标准错误(输出) Standard error 其对应的行为是 标准输入 用于程序接受数据 标准输出 用于程序输出数据 标准错误 用于程序输出错误或者诊断信息 内部机制 三张...如上图从左至右有三张 file descriptor table 归属于单个进程 global file table(又称open file table) 归属于系统全局 inode table 归属于系统全局

1.4K31

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

文件操作接口的使用 三、文件描述符 1、什么是文件描述符 2、文件描述符的分配规则 四、重定向 1、什么是重定向 2、dup2 系统调用 3、三种重定向的实现 五、Linux 下一切皆文件 六、缓冲区...也就是说,进程可以通过进程控制块中的 files 变量找到 files_struct 结构体,再通过 files_struct 中的文件描述符具体下标中保存的地址找到具体文件的内核数据结构 file,...因此,只要拿着文件描述符,就可以找到对应的文件。 所以,文件描述符是从0开始的小整数,其本质是文件描述符中的数组下标。...注:close 关闭文件并不是将 fd 指向的 file 对象释放掉,而仅仅是让当前进程文件描述符中的对应下标不再指向该 file 对象,因为同一个文件可能会被多个进程访问,特别是父子进程。...像这样,本来应该往一个文件中写入数据,但是却写入到另一个文件中去了,这种特性就叫做重定向;而重定向的本质是上层使用的 fd 不变,在内核中更改 fd 指向的 file 对象,即更改文件描述符数组中 fd

3.7K00

文件句柄与文件描述符

文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开文件的记录。...系统为每一个进程维护了一个文件描述符,该的值都是从0开始的,所以在不同的进程中你会看到相同的文件描述符,这种情况下相同文件描述符有可能指向同一个文件,也有可能指向不同的文件。...进程级的文件描述符 2. 系统级的打开文件描述符 3....文件系统的i-node 由于进程级文件描述符的存在,不同的进程中会出现相同的文件描述符,它们可能指向同一个文件,也可能指向不同的文件。...FILE结构包括一个缓冲区和一个文件描述符。而文件描述符文件描述符的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄)。

4.7K70

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

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

17330

文件描述符限制

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

1.7K20

文件描述符详解

在 32 位的 linux/unix 系统下,每个程序打开一个文件都会有一段 4G 的虚拟地址空间,这部分空间中,有1G是内核地址空间,3G是用户地址空间,这个概念我们在之前的文章中有介绍过,可参考 “...不同位置的变量在内存中的排布”,其中在内核地址空间中,维护着一个 PCB 进程控制块,其中包含很多进程相关的信息,比如进程ID、用户ID、组ID等等,但本文我们最关注的,是 PCB 进程控制块中维护的一份“文件描述符...图片 图中右侧表示的,就是我们今天讨论的主题“文件描述符”,其内部有0~1023个id可以提供用户申请分配,每当用户使用一个 open 操作打开一个文件时,都会返回一个文件描述符,比如如下代码:...int nRet = open("/dev/zero", O_RDONLY); 这句代码会在当前进程内核区文件描述符中申请一个新的文件描述符赋值给nRet值,系统默认情况下会帮我们打开三个文件描述符,...file 的值设定为2048了,这样我们每个程序就可以打开0~2047个文件描述符了(这种情况很少见)。

11510

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

2-文件描述符 文件描述符在形式上是一个非负整数。本质上是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录。 当程序打开一个现有文件或者创建一个文件时,内核会向进程返回一个文件描述符。...shell,或取消exec的重定向 $ ls $ exit $ cat somefile 4-自定义文件描述符 在 Shell 中有 9 个文件描述符。...上面我们使用了也是它默认提供的 0,1,2 号文件描述符。另外我们还可以使用 3-8 的文件描述符,只是它们默认没有打开而已。...我们还可以创建自定义的新的文件描述符。...在 Linux 中有一个被称为“黑洞”的设备文件,所有导入它的数据都将被“吞噬”—— /dev/null 。

1.5K30

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

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

1.7K20
领券