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

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 综合运用

在这里插入图片描述

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

相关文章:

  • 用golang实现二叉搜索树(BST)
  • 飞帆控件:on_post_get 接口配置
  • YOLO12改进-模块-引入Channel Reduction Attention (CRA)模块 降低模型复杂度,提升复杂场景下的目标定位与分类精度
  • 处理金融数据,特别是股票指数数据,以计算和分析RSRS(相对强度指数)
  • OpenAI深夜发布Codex:AI编程里程碑式突破
  • 二:操作系统之进程的创建与终止
  • 基于区块链技术的智能汽车诊断与性能分析
  • Ansible模块——文件属性查看,文件或目录创建和属性修改
  • 量子计算 | 量子密码学的挑战和机遇
  • Docker配置容器开机自启或服务重启后自启
  • 【iOS】探索消息流程
  • PCB设计(十九)PCB设计中NPN/PNP选型策略
  • 【甲方安全建设】拉取镜像执行漏洞扫描教程
  • 智慧大楼综合信息化建设方案,技术解决方案(PPT)
  • 【YOLO(txt)格式转VOC(xml)格式数据集】以及【制作VOC格式数据集 】
  • 掌握生成式 AI 的未来:Google Cloud 全新认证
  • 电子电路:怎么理解电子在导体中的热运动?
  • 上位机知识篇---涂鸦智能云平台
  • Open CASCADE学习|几何体切片处理:OpenMP与OSD_Parallel并行方案深度解析
  • 如何设置 MySQL 的 root 密码:详细指南
  • “当代阿炳”甘柏林逝世,创办了国内第一所残疾人高等学府
  • 大学2025丨苏大教授王尧:文科最大的危机是阐释世界的能力弱化
  • 人民日报头版:紧盯“学查改”,推动作风建设走深走实
  • 纽约市长称墨海军帆船撞桥已致2人死亡,撞桥前船只疑似失去动力
  • 俄谈判代表团已抵达土耳其,谈判预计在莫斯科时间10时左右开始
  • 机构发布“2025中国高职院校排名”