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

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

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

2.8K10

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关联关系。

    86520

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

    6.4K42

    Linux】基础IO_文件描述符

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

    1.4K30

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

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

    1.4K10

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

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

    2.5K30

    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.6K20

    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项。

    93210

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

    所以,只要拿着文件描述符,就可以找到对应文件Linux中一切皆文件,所以0,1,2可以代表键盘,显示器。 在OS内,系统在访问文件时候,只认文件描述符fd。...重定向本质:是在内核改变文件描述符表特定下标的内容,与上层无关!...每个文件对象都有对应内核文件缓冲区,我们写数据都是从上层通过文件描述符1,写到对应文件缓冲区,然后OS再把内容刷新到磁盘文件。...所以我们通过printf/fprintf不是直接写到OS内部缓冲区,而是直接写到语言级别的缓冲区,然后C语言再通过1号文件描述符把内容刷新到OS内核文件缓冲区。...所以fflush()里面是stdout,这是因为我们是刷新语言级别缓冲区内容到OS内核缓冲区内核缓冲区内容由OS进行刷新。

    7310

    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

    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.6K30

    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 内核 ;

    12.2K40

    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.5K50

    Linux内核-tmpfs文件系统

    让我们了解和熟悉基本Linux内核相关信息,Linux内核我们主要从以下几个方面来讲解: Linux内核-什么是内核 Linux内核-内核模块&参数 Linux内核-proc文件系统 Linux内核...还有名字比较类似的devtmpfs又是做什么呢? devtmpfs devtmpfs是一种在 Linux 内核中用于管理设备文件临时文件系统。...它在内核启动过程自动创建,并随着系统运行持续存在,为用户空间提供了一种统一方式来访问设备文件。...二、主要作用 设备文件管理: 在传统 Linux 系统,设备文件通常是在系统启动时通过静态方式创建,或者在设备被检测到时手动创建。...而devtmpfs简化了这个过程,内核可以自动在这个文件系统创建和管理设备文件

    7910

    Linux内核-proc文件系统

    让我们了解和熟悉基本Linux内核相关信息,Linux内核我们主要从以下几个方面来讲解: Linux内核-什么是内核 Linux内核-内核模块&参数 Linux内核-proc文件系统(本章节) Linux...内核-sys文件系统 Linux内核-tmpfs文件系统 我们上一小节里面修改内核参数时候,还有在Linux入门-目录介绍时候也说过/proc是虚拟目录。...在 Linux 系统,“/proc” 目录是一个虚拟文件系统,它提供了关于系统运行状态和进程信息动态视图。...以下是对 “/proc” 目录介绍: 一、主要特点 动态性 “/proc” 目录内容不是存储在磁盘上静态文件,而是由内核在运行时动态生成。...用户和程序可以通过读取 “/proc” 文件来获取系统状态信息,就像读取普通文件一样,但实际上这些文件并不是真正磁盘文件

    6610
    领券