文件操作原理

2023-05-16

文件描述符

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。

按照惯例
UNIX shell 使用文件描述符0与进程的标准输入结合
文件描述符1与标准输出结合
文件描述符2与标准错误输出结合。
STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO 来代替 0、1、2。

int main()
{
        char readBuf[128];

        int n_read = read(0,readBuf,strlen(readBuf));//从键盘读入

        int n_write = write(1,readBuf,strlen(readBuf));

        return 0;
}



文件平时是存放在块设备中的文件系统文件中的,我们把这种文件叫做静态文件,当我们去open一个文件时,Linux内核做的操作包括:内核在进程中建立一个打开文件的数据结构,记录下我们打开的这个文件;内核在内存中申请一段内存,并且将静态文件的内容从块设备中读取到内核中特定地址管理存放(叫动态文件)

打开文件以后,以后对这个文件的读写操作,都是针对内存中的这一份动态文件,而不是对静态文件。当然我们对动态文件进行读写以后,此时内存中的动态文件和块设备文件中的静态文件就不同步了,当我们close动态文件时,close 内部内核将内存中的动态文件的内容去更新(同步)块设备中的静态文件。

为什么不对块设备直接操作?
块设备本身读写非常不灵活,是按块读写,而内存是按字节单位操作的,而且可以随机操作,很灵活。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件操作原理 的相关文章

  • C++ string与int类型的转换

    Int转String 1 int 43 39 0 39 为对应的ASCLL码 可以通过强制类型转换将ASCLL码转成对应的字符 int digit 61 1 cout lt lt digit 43 39 0 39 lt lt endl 49
  • 设计性大作业(1) 简单路由器程序的设计

    简单路由器程序设计实验的具体要求为 xff1a 可在虚拟机上实现 xff0c 源码和操作文档加企鹅2805531180 xff08 1 xff09 设计和实现一个路由器程序 xff0c 要求完成的路由器程序能和现有的路由器产品 xff08
  • 堆和栈的存放内容

    栈 栈存放的是基本数据类型 43 引用变量名 int a 61 1 这里的a和1都存放在栈中 String b 61 abc 这里只有b存放在栈中 xff0c 而 34 abc 34 则存放在堆中 堆 堆存放的是new出来的对象 上述的St
  • 大字节序和小字节序

    一 基本概念 大字节序和小字节序是数据存储规则 小字节序是高位数据存储在内存高位地址 xff0c 低位数据存储在低位地址 大字节序是高位数据存储在内存低位地址 xff0c 低位数据存储在高位地址 二 程序判断 include lt iost
  • IMU让无人机控制变得更轻松

    多翼无人机广泛应用于监视和侦察 航空摄影和测量 搜索和救援任务 通信中继和环境监测 目前无人机的手动控制大部分基于视觉反馈 xff0c 所以操作环境中的障碍物会造成干扰 因此 xff0c 需要其他感官反馈 xff0c 例如触觉 xff0c
  • DB2reorg 和runstats使用

    DB2中 xff0c 如果使用alter更改表结构后 xff0c 需要执行reorg 命令消除碎片 xff0c 进行重组 xff1b 创建索引后 xff0c 需要执行RUNSTATS更新统计信息 xff0c 使索引生效 xff1b 如果修改
  • HTTP的8种请求方式及常用请求方式的解析

    一 什么是HTTP xff1f HTTP xff0c 即超文本传输协议 xff0c 是一种实现客户端和服务器之间通信的响应协议 xff0c 它是用作客户端和服务器之间的请求 客户端 xff08 浏览器 xff09 会向服务器提交HTTP请求
  • 星网宇达(惯导+IMU)设备实现自动采点

    一 创建和打开gps Road txt文件 xff0c 准备往里写数据 FILE span class token operator span p span class token operator 61 span span class t
  • 车辆自动采点

    一 整体思路 xff1a 车辆自动踩点需要获取千寻差分数据 xff0c 差分数据有两种格式 xff1a 分别是GPGGA和GRHDT xff0c GPGGA内存在车辆经纬度定位信息 xff0c GRHDT内存在转向角信息 xff0c 分别进
  • 安卓实现串口通信

    1 串口通信232的接线 一般通讯使用232串口的话 xff0c 我们会用到2 3 5接口 xff0c 根据安卓平板的标记依次接线 xff08 小白注意 xff1a 接收端要与发送端接入 xff0c 不要根据名称一样就接线 xff09 2
  • vins-mono编译报错

    vins mono 报错 xff08 opencv3 gt opencv4 xff09 报错原因error CV RGB2GRAY was not declared in this scopeerror CV BGR2GRAY was no
  • http协议之libcurl

    一 libcurl简介 libcurl是一个跨平台的网络协议库 xff0c 支持http https ftp gopher telnet dict file 和ldap 协议 libcurl同样支持HTTPS证书授权 xff0c HTTP
  • Vue项目实现页面加载进度条&分布阶段去除console

    目录 进度条 xff08 1 xff09 下载nprogress依赖 xff08 2 xff09 在main js中导入nprogress包 xff08 3 xff09 在request拦截器中 xff0c 展示进度条 xff08 4 xf
  • Jeston XAVIER NX 使用sudo apt-get install 安装ros过程中出现以下问题

    the following packages have unmet dependencies ros noetic desktop full Depends ros noetic desktop but it is not going to
  • esp32(ardunio环境)+python实现网关

    esp32 ardunio环境 xff09 43 python实现网关 使用ardunio 和VScode 以ESP32为客户端 xff0c 电脑为服务端收发消息 硬件准备 1 ESP32开发板 xff0c 数据线 环境准备 ardunio
  • Ubuntu18.04下 用lidar_align实现激光雷达VLP-16和Imu联合标定(未完成)

    Ubuntu18 04下 用lidar align实现激光雷达VLP 16和Imu联合标定 一 实现所用设备二 安装依赖 配环境2 1 依赖2 2 下载 Lidar 43 IMU 标定工具 xff1a lidar align xff0c 编
  • 记录学习过程中遇到的各种令人烦躁的问题(一)在ROS下安装GPS驱动 nmea_navsat_driver

    记录学习过程中遇到的各种令人烦躁的问题 1 在ROS下安装GPS驱动 nmea navsat driver 20201216问题 xff1a 解决方法 xff1a 每次在一个新系统下就会遇到莫名其妙的问题 xff0c 在另一个系统明明安装的
  • Pytorch深度学习神经网络(对CIFAR-10 dataset分类)

    Pytorch深度学习神经网络 一 PyCharm下新建python文件二 对CIFAR 10 dataset分类的神经网络代码1 依据网络图及计算公式2 具体代码详情 三 终端输入命令打开tensorboard可视化1 tensorboa
  • Pytorch深度学习——优化器

    Pytorch深度学习 优化器 一 PyCham下新建文件二 代码模块三 运行结果分析 继昨天损失函数Loss Functions学习后 xff0c 在此基础上加入优化Optimization 一 PyCham下新建文件 二 代码模块 就是

随机推荐