首页 > 系统相关 >Linux 文件I/O

Linux 文件I/O

时间:2023-05-06 19:34:06浏览次数:34  
标签:文件 偏移量 描述符 内核 Linux 缓冲区 open

一、多次打开同一个文件

  1. 一个进程内多次 open 打开同一个文件,那么会得到多个不同的文件描述符 fd,同理在关闭文件的时候也需要调用 close 依次关闭各个文件描述符。
  2. 一个进程内多次 open 打开同一个文件,在内存中并不会存在多份动态文件。
  3. 一个进程内多次 open 打开同一个文件,不同文件描述符所对应的读写位置偏移量是相互独立的,是分别写(各从各的位置偏移量开始写)。
  4. 多个不同的进程中调用 open()打开磁盘中的同一个文件,同样在内存中也只是维护了一份动态文件,多个进程间共享,它们有各自独立的文件读写位置偏移量。

二、文件接续写

  1. 如果 open 函数携带了 O_APPEND 标志,调用 open 函数打开文件,当每次使用 write()函数对文件进行写操作时,都会自动把文件当前位置偏移量移动到文件末尾,从文件末尾开始写入数据,也就是意味着每次写入数据都是从文件末尾开始。
  2. dup、dup2 函数用于复制文件描述符,复制得到的文件描述符与原文件描述符都指向同一个文件表,所以它们的文件读写偏移量是一样的,在不使用O_APPEND标志的情况下,可以通过文件描述符复制来实现接续写。

三、I/O缓冲

read()和 write()系统调用或标准read()和write()在进行文件读写操作的时候并不会直接访问磁盘设备,而是仅仅在用户空间缓冲区和内核缓冲区(kernel buffer cache)之间复制数据。对于读文件而言,内核会从磁盘设备中读取文件的数据并存储到内核的缓冲区中,当调用 read()函数读取数据时,read()调用将从内核缓冲区中读取数据,直至把缓冲区中的数据读完,这时,内核会将文件的下一段内容读入到内核缓冲区中进行缓存。
直接I/O只在一些特定的需求场合,譬如磁盘速率测试工具、数据库系统等.

标签:文件,偏移量,描述符,内核,Linux,缓冲区,open
From: https://www.cnblogs.com/bite-an-orange/p/File_IO.html

相关文章

  • vite.config.ts配置文件
    import{defineConfig}from'vite'importvuefrom'@vitejs/plugin-vue'import{resolve}from'path'importvueSetupExtendfrom'vite-plugin-vue-setup-extend'importAutoImporttfrom'unplugin-auto-import/v......
  • linux -- 基础(三)
    集群搭建快照复制当前的机器的环境,当出现问题的时候,将机器恢复到当前快照的状态克隆关闭要被克隆的虚拟机进行完整克隆修改克隆虚拟机的ip及主机名修改linux的IP地址vi/etc/sysconfig/network-scripts/ifcfg-ens33192.168.22.171修改主机名称vi/etc/hostnameli......
  • spring和hibernate配置文件整合
    为了操作方便,我们经常在spring整合hibernate的WEB项目中省去了用hibernate.cfg.xml的麻烦,将hibernate的信息直接配置在Spring配置文件中下面的都是针对Spring整合Hibernate(注解方式的hibernate)来说的hibernate.cfg.xml和applicationContext.xml原始配置......
  • Linux 工具 | rsync
    rsync是非常常用的文件同步工具既可以同步本地数据,类似于cp。又可以同步远程数据,类似于scprsync不会复制全部文件,而是采取增量备份,只复制有改动的文件,速度很快rsync算法中判断文件改动的默认规则是,文件大小或文件修改时间同步本地文件最基础的用法rsync-auv/dir1/fi......
  • RPC,远程连接Linux开发
    RPC​ 指远程过程调用eg:​ 两台服务器,A,B,A想要调用B服务器上的应用的函数或方法,但是他两不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据,只要调用成功这就称为RPC调用.主要应用在分布式系统当中与微服务。由于计算能力需要横向扩展,需要在多台机......
  • linux 下安装和使用Elasticsearch8+php的操作
    首先安装Elasticsearch8版本不需要jdk环境,就是JVAV的环境,他本身的压缩文件里就包含了固定的jdk去官网1、下载Elasticsearch的官方地址:https://www.elastic.co/cn/下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch我这里下载的是elasticsearch-8.......
  • Window任务计划定时任务执行Kettle Spoon单个转换文件或本地资源库Local-KSPOON中的转
    1.Window任务计划定时任务执行KettleSpoon单个转换文件或本地资源库Local-KSPOON中的转换*Window任务计划定时任务执行KettleSpoon本地资源库Local-KSPOON中的转换:(1)准备.bat文件和日志文件 D:cdD:\software\KettleSpoon\data-integrationPan.bat-repLocalSpoon-KSPOO......
  • java filter过滤器 读取配置文件properties的值
    http://www.yayihouse.com/yayishuwu/chapter/29811.获取application.properties的值如userId=1 2.一般实体中采用@Value既可获取@Value("userIdl")privateStringuserId; 但是在filter中,需要用上下文对象来获取filter的生命周期如下:web应用程序启动时,web服务器将创......
  • C# 通过地址获取文件及名称(含后缀)
    通过两种方式:HttpWebRequestWebClient废话不多说,直接上代码///<summary>///通过地址获取文件及名称(含后缀)///</summary>///<paramname="url">文件下载地址</param>///<paramname="stream">文件流<......
  • 系统集成09-Samba文件共享服务器管理
    系统集成09-Samba文件共享服务器管理1Samba文件共享服务器搭建Samba文件共享服务介绍Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,SMB(ServerMessageBlock)服务器消息块。Samba最大的功能是可以用于Linux与windows系统直接的文件共享和打印共享,既可以用于Window......