首页
学习
活动
专区
圈层
工具
发布

【Linux】基础IO(1)文件、fd

根据所在位置可以分为两种文件 Linux系统里面就也存在着大量的文件,毕竟Linux系统里面一切皆文件,如果当前我们不使用ls这个可执行文件,那么ls这个文件就不会加载内存里面。...管理文件 Linux系统里面可以同时存在多个进程,而一个进程又可以打开多个文件,所以Linux系统里面可以存在多个文件。文件这么多,要不要进行管理,那当然是要的。怎么管理?先描述再组织。...1.2 认识文件描述符fd 之前通过open接口讲到,文件描述符就是一个整数。但这个整数为什么为从3开始?...而且也能够看到,stdin、stdout和stderr它们的类型都是文件指针,文件指针类型其实也就是对fd的一种封装,即FILE是一种结构体,它里面有存储fd也就是每个文件对应的文件描述符。...既然是数组,那么就一定有对应的下标,而这些下标也就是fd,即文件描述符的本质是数组下标。

23210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux下 fd_set 结构

    fd_set是一种数据类型,在select函数中包含了3个参数,就是这个fd_set类型,fd_set也是理解select模型的关键,关于select的具体说明,可以参考之前的文章嵌入式Linux编程之...select可以同时对多个文件描述符的状态去监听,那么这个所谓的“多个”的实现就是通过fd_set来实现的, 简单的说: fd_set是select监听描述符的集合,每个描述符集存储在一个fd_set...,也就是只有8bit,那么1个字节长的fd_set最大可以对应8个文件描述符(fd), 那么问题来了,如果文件描述符是100怎么办?...答案很简单,fd_set并不是指有1个字节,可以有n个字节,可以拿多个字节凑多个bit,如果fd是100,仍然可以执行 FD(100, &set),执行后,set的值为 1xxxxxxxxxxx.......至于fd_set的最大为多少,取决于机器,一般 是够用的,因为linux在分配文件描述符的时候,不是随意分配 个几千几万的,这个是比较宝贵的资源,是从小到大,一点点递增的,谁也不会傻到同时打开几万个文件的

    3.3K20

    JVM内存分配担保机制

    在JVM的内存分配时,也有这样的内存分配担保机制。就是当在新生代无法分配内存的时候,把新生代的对象转移到老生代,然后把新对象放入腾空的新生代。...由于不同的收集器的收集机制不同,为了呈现出内存分配的担保效果,我们这里需要手动指定为Serial+Serial Old模式。...这里我们使用的是JDK1.8,所以不用再手动去开启担保机制。 下面我们新建四个byte数组,前三个分别为2MB大小的内存分配,第四个是4MB的内存分配。代码如下: ?...第四个对象还要不要分配呢? 此时,JVM就启动了内存分配的担保机制,把这6MB的三个对象直接转移到了老年代。...在GC前还会进行一次判断,如果要分配的内存>=Eden区大小的一半,那么会直接把要分配的内存放入老年代中。否则才会进入担保机制。

    12.2K71

    Memcache内存分配机制

    Slab Allocator memcached 默认情况下采用了 Slab Allocator 的机制分配和管理内存....在该机制出现之前内存分配简单的通过 malloc 和 free 来管理所有的记录, 旧的方式会导致产生很多内存碎片, 加重机器管理内存的负担, 甚至有可能导致操作系统比 memcached 进程本身还慢...Slab 的基本原理是按照预先规定的大小, 将分配的内存分割成特定长度的块(chunk), 以解决内存碎片的问题. 这也意味着存取记录的时候可以减少内存分配的次数, 有点类似线程池/内存池的感觉....Allocator 的缺点 尽管 slab 很好的解决了内存碎片的问题, 但该机制也给 memcached 带来了新的问题....如果空闲列表没有空闲的item可以分配,则Memcached会去申请一个slab(默认大小为1M)的内存块,如果申请失败,则返回NULL,表明分配失败。

    1.1K20

    Elasticsearch分片分配机制

    ​ 分片分配就是把一个分片分配到某个节点的过程。我们在创建或删除索引、节点加入、节点离线、执行reroute API、调整副本数、集群重启等场景下都需要用到分片分配。...分片分配可以拆解成两个问题 1、选择一个合适的节点分配分片 2、确定该节点上的分片是主分片还是副本 Elasticsearch通过Allocator和AllocationDecider两类基础组件完成分片分配过程...其中Allocator负责找到最合适的分配节点;AllocationDecider负责判断这个节点是否能够分配该分片。...:无FilterAllocationDecider功能:通过restAPI 动态设置的分片分配过滤器,可以指定分片往某些节点分配或者限制分片往某些节点分配,cluster级别配置会覆盖index级别参数...settings": { "index.unassigned.node_left.delayed_timeout": "5m" }} 由上面一系列分析可知,elasticsearch分片均衡机制和权重算法都依赖于分片数量

    74700

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

    三、文件描述符的分配规则 1.关闭012文件描述符产生的现象(新打开文件的fd被赋值为0或1或2) 1....实际上文件描述符在分配时,会从文件描述符表中的指针数组中,从小到大按照顺序找最小的且没有被占用的fd来进行分配,自然而然关闭0时,0对应存储的地址就会由stdin改为新打开的文件的地址,所以打印新的文件的...通过close关闭1,然后系统将新打开文件的地址分配到对应被关闭的1中的地址,然后打印到stdout的数据,就会被打印到新打开文件中,这样重定向的方式太搓了,完全可以利用系统调用dup2来进行重定向。...五、Linux下一切皆文件 1....vfs层是Linux内核中的一个软件层,可以使得我们不关心底层硬件读写方式的差别,只用struct file中的函数指针即可管理对应的硬件的读写方式。

    1.8K30

    在 Linux 上用 fd 代替 find命令

    许多 Linux 程序员在其工作中每天都在使用 find 命令。但是 find 给出的文件系统条目是有限的,如果你要进行大量的 find 操作,它甚至不是很快速。...因此,我更喜欢使用 Rust 编写的 fd 命令,因为它提供了合理的默认值,适用于大多数使用情况。 正如它的 README 所说,“fd 是一个在文件系统中寻找条目的程序。...安装 fd 在 Linux 上,你可以从你的软件库中安装 fd(可用的软件包列表可以在 Repology 上的 fd 页面 找到)。...另外,你也可以使用 Rust 的 Cargo 软件包管理器: $ cargo install fd-find 使用 fd 要做一个简单的搜索,运行 fd 并在后面跟上要搜索的名字,例如: $ fd shregistry...例如: $ fd .

    2.7K50

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

    介绍在Linux系统中,fd命令是一条用于显示文件描述符(File Descriptor)的命令。文件描述符是操作系统用于跟踪和管理打开文件的整数值,它是对打开文件的引用。...通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。图片2. 语法使用fd命令的语法如下:fd [选项]3....4.3 显示文件描述符的类型使用fd -t命令可以显示当前进程的文件描述符的类型。...总结Linux fd命令是用于显示文件描述符的实用命令。通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。...在日常的系统管理和开发工作中,熟悉和掌握fd命令的使用将大大提高工作效率。希望本文对你理解和使用Linux fd命令有所帮助。如需进一步了解命令的更多细节和用法,请查阅相关的文档和参考资料。

    4.3K20

    认识 Linux 内存构成:Linux 内存调优之内存分配机制和换页行为认知

    写在前面 博文内容涉及 Linux 中内存分配和换页机制的基本认知 理解不足小伙伴帮忙指正 :),生活加油 99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑...不要站在原地想象困难,行动永远是改变现状的最佳方式 前面的文章和小伙伴们分享了 Linux 虚拟内存,物理内存,以及页表,TLB,大页认知,今天我们来看看具体的内存分配以及换页行为 内存分配机制和换页行为认知...内存分配机制 前面的博文我们有讲到,Linux 系统中进程内存的使用是通过申请虚拟内存,按需分配物理内存的方式,内存页是内存的基本单位,Linux 一个标准的内存页一般为 4kb, 具体要由 CPU...下面是一个典型的内存页的生命周期 1.进程申请虚拟内存的过程是内存分配器与内核协同完成的机制,对使用 glibc 内存分配器的进程来说,glibc 提供了一系列内存分配的函数,包括 malloc() 和...缓存/缓冲区机制 当内存不够时,Linux 会进行换页操作,在极端情况下会直接杀掉内存溢出进程的 OOM Killer,在内存充足的时候, Linux 会使用空闲的内存来作为文件系统的缓存,cache

    83810

    MySQL数据类型的存储机制:动态分配与固定分配

    在设计数据库时,了解不同数据类型的存储机制是非常重要的,它不仅影响到数据的存储效率,还可能影响到数据库的性能。...动态分配存储空间的数据类型 动态分配存储空间的数据类型是指根据实际存储的数据大小动态分配空间的数据类型。...它的存储空间也是动态分配的。 2. 固定分配存储空间的数据类型 固定分配存储空间的数据类型是指不管实际存储的数据大小如何,都会分配固定大小的存储空间的数据类型。...它的存储空间也是固定分配的。...总结 了解MySQL中不同数据类型的存储机制,可以帮助我们更好地设计数据库,优化数据库的性能和存储效率。

    99750

    JVM内存分配机制之栈上分配与TLAB的区别

    产生一个比较大的负担 而前几天在看到jvm调优书中有说到,new出来的对象并非所有都存在堆内存中,其实还有其他另外两个地方可以进行存储new出的对象,称之为栈上分配和TLAB 栈上分配 为什么需要栈上分配...什么是栈上分配 所以,栈上分配是JVM提出的一种调优方案,JVM通过逃逸分析确定该对象不会被外部访问,如果不会逃逸可以将该对象在栈上分配内存,每个方法或者说每个线程都有属于自己独立的栈帧,随着方法的调用结束...JVM对于这种情况可以通过开启逃逸分析参数(-XX:+DoEscapeAnalysis)来优化对象内存分配位置,使其通过标量替换优先分配在栈上(栈上分配),JDK7之后默认开启逃逸分析,如果要关闭使用参数...,遇到大对象最终也只能分配到堆空间中 如下图:对象分配流程图 ?...最后栈上分配和TLAB的对比 名称 针对点 处于对象分配流程的位置 栈上分配 减少GC的负担 1 TLAB 加速堆上对象分配速度 2

    2.8K20
    领券