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

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

Linux操作系统,一切皆是文件—— "Everything is a file"。 如果要在Linux系统编写操作文件代码,需要借助文件描述符。...文件索引——文件描述符(file descriptor): 文件描述符是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。...文件描述符就是内核为了高效管理已被打开文件所创建索引值。 文件描述符指向内核为每一个进程维护打开文件记录表。当要处理文件时,将文件对应文件描述符作为参数传给函数。...文件描述符在用户进程和内核之间映射关系: Linux查看文件描述符指令:lsof(list open files) lsof可以打开文件: 普通文件 目录 网络文件系统文件 字符或设备文件...,非负整数是成功,-1是失败 whence在文件位置如图所示: 当文件不再被使用时,可以调用 close(int fd) 函数来关闭被打开文件

2.7K10

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系统中都被看作是文件,而它们都有相应文件描述符与之对应。 其实我们与计算机之间交互是我可以输入一些指令之后它给我一些输出。...那么我们可以把上面表格文件描述符0理解为我和计算机交互时输入,而这个输入默认是指向键盘; 文件描述符1理解为我和计算机交互时输出,而这个输出默认是指向显示器文件描述符2理解为我和计算机交互时...接着两个echo命令输出会自然去找文件描述符1,然后它看到文件描述符1指向是test文件,所以它会把输出写到test文件。...整个过程就是这样,只要你理解了它们原理,以后无论在脚本怎样处理重定向你都不会感觉到迷茫了。下面我将介绍一些与文件描述符相关一些shell命令,这可以让你如虎添翼。

2.4K30

内核文件描述符传递实现(基于5.9.9)

前言:文件描述符内核提供一个非常有用技术,典型在服务器,主进程负责接收请求,然后把请求传递给子进程处理。本文分析在内核文件描述符传递是如何实现。...假设文件底层资源是TCP连接,而主进程想把这个关系同步到子进程,即交给子进程处理,那怎么办呢?这时候就需要用到文件描述符传递。下面是我们期待架构。 ?...文件描述符这种能力不是天然,需要内核支持,如果我们单纯把fd(文件描述符)当作数据传给子进程,子进程无法指向对应文件。下面我们如何使用这个技术并通过内核来看看如何实现这个技术。...把需要发送文件描述符保存到msghdr,并设置一些标记。然后通过Unix域发送(Unix是唯一一种支持文件描述符传递进程间通信方式)。我们下来主要来分析内核对sendmsg实现。...后记,我们看到文件描述符传递核心就是在发送数据记录要传递文件描述符对应file结构体,然后发送做好标记,接着接收过程,重新建立新fd到传递file关联关系。

75720

调整进程最大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

3K50

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 limitnofilesoft limit c. nofilesoft limit不能超过其hard limit d.

5.8K42

Linux】基础IO_文件描述符

Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...文件描述符分配规则 文件描述符分配规则为从0开始,扫描文件描述符,没有被使用数值最小下标,作为新打开文件文件描述符。...因此,我们也可以推测:在C语言级别提供文件结构体FILE,一定存在文件描述符!...这就是重定向原理,即:在上层无法感知情况下,修改底层进程文件描述符,特定下标的指向。...用户/内核 级缓冲区 我们上面所说缓冲区都是属于用户级缓冲区,实际上OS为了提升整体性能,也会存在内核级缓冲区(这里不过多讨论),而我们用户级缓冲区在哪里呢?

99630

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

Linux 进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令底层工作原理,最后我们从操作系统角度看看为什么说线程和进程基本没有区别。...内核对于一个进程描述,也可以称为「进程描述符」。...我们常说文件描述符」就是指这个文件指针数组索引,所以程序文件描述符默认情况下 0 是输入,1 是输出,2 是错误。...因为硬件都是由内核管理,我们进程需要通过「系统调用」让内核进程访问硬件资源。 PS:不要忘了,Linux 中一切都被抽象成文件,设备也是文件,可以进行读和写。...如果我们写程序需要其他资源,比如打开一个文件进行读写,这也很简单,进行系统调用,让内核文件打开,这个文件就会被放到files第 4 个位置,对应文件描述符 3: 明白了这个原理,输入重定向就很好理解了

1.3K10

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

说到进程,恐怕面试中最常见问题就是线程和进程关系了,那么先说一下答案:在 Linux 系统,进程和线程几乎没有区别。...Linux 进程其实就是一个数据结构,顺带可以理解文件描述符、重定向、管道命令底层工作原理,最后我们从操作系统角度看看为什么说线程和进程基本没有区别。...内核对于一个进程描述,也可以称为「进程描述符」。...如果我们写程序需要其他资源,比如打开一个文件进行读写,这也很简单,进行系统调用,让内核文件打开,这个文件就会被放到files第 4 个位置,对应文件描述符 3: ?...到这里,你可能也看出「Linux 中一切皆文件」设计思路高明了,不管是设备、另一个进程、socket 套接字还是真正文件,全部都可以读写,统一装进一个简单files数组,进程通过简单文件描述符访问相应资源

2.3K30

Linux内核19-中断描述符表IDT初始化

Linux使用中断描述符表IDT记录管理所有的中断和异常。那么,首先,Linux内核应该把IDT起始地址写入idtr寄存器,然后初始化所有的表项。这一步在初始化系统时完成。...因为汇编指令int允许用户进程发送任意编号中断(0-255)。为此,IDT初始化必须考虑阻止由用户进程int指令引发非法中断和异常。可以通过将中断描述符DPL域设为0来实现。...让我们看看Linux如何实现这种策略。 中断、陷阱和系统门 在之前文章,我们已经介绍过,Intel提供了三种类型中断描述符:任务,中断和陷阱门描述符。...Linux分类有些不同,它们如下所示: 中断门 和Intel中断门相同。所有的用户进程不能访问(该门DPL设为0)。所有Linux中断处理程序都是通过中断门激活,也就是说只能在内核态访问。...一旦Linux启动,IDT会被搬运到RAM受保护区域并被第二次初始化,因为Linux不会使用任何BIOS程序。 IDT结构被存储在idt_table表,包含256项。

84410

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

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

2.1K20

Linux内核编程--常见文件操作

fd2); /*把一个文件描述符复制到一个新描述符上*/ 函数执行后,返回文件描述符与原有的旧文件描述符共用同一个文件表项,但是文件描述符标志将被清除,进程调用exec时文件描述符将不会被关闭...dup()返回文件描述符一定是当前可用文件描述符最小值。 dup2()可以用fd2指定新描述符值。如果fd2已经打开,则先将其关闭。若fd==fd2, 则dup2返回fd2,而不关闭它。...#include int fcntl(int fd, int cmd, ... ); --fd表示需要操作文件描述符,cmd表示对文件描述符进行如何操作 --常用cmd: (1)...linux系统”快捷方式“被称为软链接。...文件权限在Linux表示: [root@VM-4-13-centos cpp_learning]# ls -l hello.txt -rw-r--r-- 1 root root 12 Apr 13

2K40

Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )

文章目录 一、查看 .config 编译配置文件 二、正式编译内核 一、查看 .config 编译配置文件 ---- 在上一篇博客 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux...内核编译 菜单配置 |菜单配置光标移动与选中状态 | 保存配置 | 配置项帮助文档 ) , 已经将编译配置保存到了 .config 文件 ; 查看 .config 编译配置文件 , 在 linux...内核源码根目录 , 执行 gedit .config 命令 , 查看 .config 编译配置文件 : ( 也可以使用 vi , vim 等文本编辑器查看 ) 在 .config 配置 , #...代表注释 , CONFIG_IRQ_WORK=y 等号右侧 y 表示同意该操作 ; .config 文件内容示例 : 配置文件很多 , 这里只贴出一部分 ; # # Automatically generated...---- 在 Linux 内核源码根目录 , 执行 sudo make j4 开始编译 Linux 内核 ;

11.8K40

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

前言 上一节 [[16-linux程序后台执行指西]],我们提到了,重定向操作,对于后台执行命令来说,很有用,这一节来详细说说。...2-文件描述符 文件描述符在形式上是一个非负整数。本质上是一个索引值,指向内核为每一个进程所维护该进程打开文件记录表。 当程序打开一个现有文件或者创建一个文件时,内核会向进程返回一个文件描述符。...$ wc << test > I > am > happy. > test 3 3 12 4-永久重定向 有的时候,我们可能希望脚本某些内容永久重定向到某个文件...你可以使用下面命令查看当前 Shell 进程打开文件描述符: $ ls -Al /dev/fd/ total 0 lrwx------ 1 yzpeng yzpeng 64 Apr 30 12:59...我们还可以创建自定义文件描述符

1.5K30

Linux 内核 Kconfig 文件作用和添加 menuconfig 项方法

嵌入式开发,需要定制或添加一些内核功能。这里就需要配置 Kconfig 文件了。本文简单说明一下如何修改。...便于需要时查找 Ref: Linux内核Kconfig文件作用 本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。...完成了make menuconfig之后,内核会生成.config文件,就在Linux代码树根目录下。这个文件制定了各个模块是否会被编译,由Makefile读取并在编译过程配置内核。...以前文为例,我添加了配置项在Kconfig,这个Kconfig位置是drivers/char/,那么我必须在这个文件夹下Makefile添加一行: obj-$(CONFIG_XXXX_MOTOR...然后,专心添加你.c和.h文件就行了。由于是二态选项,所以你代码要么就直接被包含在内核,要么就压根不存在。不像三态,还有一个“M”选项。三态配置参见参考资料吧。

3.1K50

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

文件操作接口使用 三、文件描述符 1、什么是文件描述符 2、文件描述符分配规则 四、重定向 1、什么是重定向 2、dup2 系统调用 3、三种重定向实现 五、Linux 下一切皆文件 六、缓冲区...;Linux 中用于管理文件内核数据结构叫做 struct file {} 结构体,其中包含了文件大部分属性。...也就是说,进程可以通过进程控制块 files 变量找到 files_struct 结构体,再通过 files_struct 文件描述符表具体下标中保存地址找到具体文件内核数据结构 file,...像这样,本来应该往一个文件写入数据,但是却写入到另一个文件中去了,这种特性就叫做重定向;而重定向本质是上层使用 fd 不变,在内核更改 fd 指向 file 对象,即更改文件描述符表数组 fd...3、缓冲区位置 在之前 进度条代码 我们知道,我们谈论所有缓冲区都不在操作系统内核,而是位于用户级语言层面;实际上,对于C语言来说,缓冲区位于 FILE 结构体Linux 下,我们可以在

3.7K00

Linux内核递归漏洞利用

6月1号,我提交了一个linux内核任意递归漏洞。如果安装Ubuntu系统时选择了home目录加密的话,该漏洞即可由本地用户触发。...背景知识 在Linux系统,用户态栈空间通常大约是8MB。如果有程序发生了栈溢出的话(比如无限递归),栈所在内存保护页一般会捕捉到。...Linux内核栈(可以用来处理系统调用)和用户态栈很不一样。...Linux大多数文件系统既不用底层设备(伪文件系统,比如sysfs, procfs, tmpfs等),也不用块设备(一般是硬盘上一块)作为备用存储设备。...这个文件也可以被映射到进程B内存。为了能够重复该进程,某些数据需要反复加密,进而创建一个加密matroska 文件,并将这个文件加载到进程 A内存

2K60

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

Linux】基础IO_文件操作 前言 在前文中学习了open函数,我们知道open函数返回值就是文件描述符,本章将对文件描述符进行详细讲解。 文件描述符 文件描述符是什么?...文件描述符分配规则 文件描述符分配规则为从0开始,扫描文件描述符,没有被使用数值最小下标,作为新打开文件文件描述符。...因此,我们也可以推测:在C语言级别提供文件结构体FILE,一定存在文件描述符!...这就是重定向原理,即:在上层无法感知情况下,修改底层进程文件描述符,特定下标的指向。...dup2原理: dup2函数原理实际上就是通过拷贝方式,修改原来文件描述符特定下标所指向文件,这里需要注意一点是,dup2函数在实现重定向时,会先将原有的文件描述符指向对应文件关闭,这样避免内存泄漏问题出现

17230
领券