当前位置: 首页 > web >正文

Linux 文件(1)

1. 文件

1.1 文件是什么

一个文件,是由其文件属性与文件内容构成的。文件属性又称为一个文件的元数据,因此如果一个文件,内容为空,这个文件依然要占据磁盘空间。

1.2 文件在哪里

一个文件,如果没有被打开,那么这个文件就在硬盘上,对于硬盘上的文件,我们使用文件系统进行组织和管理。

一个文件,如果被打开了呢?我们首先要搞明白,文件是如何被打开的。之前,我们在C语言中,使用fopen函数来打开一个文件,即文件打开,本质是通过一个程序实现的。所以,文件的打开依赖于进程,而进程打开文件的实质就是由操作系统将此文件加载到内存中。

所以,一个进程可以打开多个文件.OS内,一定同时存在多个被打开的文件,因此在操作系统中,一定存在一种专门描述文件的结构体,操作系统借助该结构体,对打开的,加载到内存中的文件进行管理。

2. 文件的相关操作

2.1 文件操作的本质

文件是由文件内容与文件属性构成的,因此对文件的操作,本质就是对文件内容和文件属性的操作。

对于文件的操作,无论是读文件,还是写文件,都需要在内存与硬盘之间进行交互,因此一定是由操作系统来实现的。

而我们在C语言中,通过C语言库中封装好的文件操作相关函数实现文件操作,实质上,这些函数底层都是通过相关文件的系统调用实现文件操作的。

2.2 用C语言函数进行文件操作

2.2.1 文件写

在这里插入图片描述

2.2.2 文件读

在这里插入图片描述

2.2.3 通过文件读和写实现cat命令

Linux命令行中的cat命令,本质上就是获取相应文件内容,并将相关文件内容输出到显示器上,因此我们可以同文件操作的相关接口实现cat命令。

在这里插入图片描述

2.3 用系统接口进行文件操作

前面讲过,所有对文件的操作,本质上都是通过系统调用接口完成的。下面,我们直接通过Linux的系统调用接口,来对文件进行操作。

2.3.1 打开文件

在这里插入图片描述
open是用于打开文件的系统接口。

pathname:文件的绝对路径或相对路径。
flags:打开文件时的标志位,即文件以怎样的方式打开(读或写等等)。此处传递标志位的方式很特殊,利用了位操作。
mode:是文件不存在时,创建文件所赋予的权限。

此处,讲一下如何利用位操作便捷传递标志位。

在这里插入图片描述
输出结果如下:

在这里插入图片描述

言归正传,我们来看一下open中有哪些标志位。

O_RDONLY:只读方式打开
O_WRONLY:只写方式打开
O_RDWR:读写方式打开
O_CREAT:文件不存在时,创建文件
O_TRUNC:打开文件时,清空文件内容
O_APPEND:文件以追加内容的形式打开

上述标志位中,前三个标志位,必须要选择一个,其它标志位则作为附加。

2.3.2 读文件

在这里插入图片描述
fd:这个是文件描述符,open函数成功打开文件后,便会返回文件描述符fd,对应相应文件。
buf:为写入的缓冲区。
count:为至多读入的字节数。

2.3.3 写文件

在这里插入图片描述
buf:为读取的缓冲区。
count:为至多写入的字节数。

2.3.4 关闭文件

在这里插入图片描述
通过相应的文件描述符fd来关闭文件。

2.3.5 综合运用

在这里插入图片描述

在上述代码中,需特别注意,写完文件后,需关闭文件,再以读的方式打开。这是因为,写文件过后,文件内部用于定位的指针在文件末尾,而我们需要重头开始读文件,这样才能读取到内容。因此,必须关闭文件,再重新打开文件,以重置该文件指针到开头,或者使用重定位文件指针的系统调用。

http://www.xdnf.cn/news/7273.html

相关文章:

  • 三维重建(二十三)——各种参数的测试(废案)
  • RV1126 + PCA9685实现7路舵机+2路减速电机控制
  • C++语法中的引用及其原理
  • 上位机知识篇---涂鸦智能云平台
  • Linux 线程(上)
  • Mamba LLM 架构简介:机器学习的新范式
  • SHAP分析图的含义
  • STM32F1软件调试详解
  • vLLM - LLM 类初始化参数
  • Addressable-加载指定资源
  • QT6 源(108)篇二:阅读与注释菜单栏里的菜单对象 QMenu,先是成员函数,后是信号函数的测试
  • Python 位运算:深入理解与实践应用
  • Linux开放访问端口
  • boost之signal2
  • 【ROS2】虚拟机使用fishros脚本一键安装humble
  • 我的创作纪念日——512天
  • 学习笔记:hspice仿真Verilog-a
  • ReentrantLock、ReentrantReadWriteLock、StampedLock讲解
  • ET Attribute
  • 【Python 算法零基础 4.排序 ① 选择排序】
  • 深度剖析:YOLOv8融入UNetv2 SDI模块的性能提升之旅
  • 游戏服务器之聊天频道设计
  • 双紫擒龙紫紫红指标源码学习,2025升级版紫紫红指标公式-重点技术
  • transformer project tutorial
  • volatile
  • Python实例题:Flask开发轻博客
  • mybatis中的resultMap的association及collectio的使用
  • 【动态规划】状压dp
  • Mlp-Mixer-BiGRU故障诊断的python代码合集
  • LLMs:《POE报告:2025年春季人工智能模型使用趋势》解读