Linux文件fd

文件理解

文件=属性+内容

打开文件:本质是进程打开文件,文件没被打开时候再磁盘上。

操作文件:本质是进程操作文件。

在操作系统内部,一定存在大量被打开的文件,会对其进行管理,每一个被打开的文件,一定存在对应的描述文件属性的结构体struct file。

在task_struct存在一个struct file_struct* files,files存在struct file* fd_arraryN

文件描述符fd本质是:文件映射关系的数组的下标。

虚拟文件系统:推荐深入理解LinuxVFS与文件系统抽象-CSDN博客

文件操作

open

cpp 复制代码
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
 
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
 
pathname: 要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行"或"运算,构成flags。
参数:
 O_RDONLY: 只读打开
 O_WRONLY: 只写打开
 O_RDWR : 读,写打开
 这三个常量,必须指定一个且只能指定一个
 O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限
 O_APPEND: 追加写mode_t理解:直接 man 手册,比什么都清楚。
 O_TRUNC:文件存在就清空
返回值:
 成功:新打开的文件描述符
 失败:-1

创建成功,返回值大于等于3,是文件描述符

0:标准输入

1:标准输出

2:标准错误

因此向显示器打印也可以用write。

过程:

1.创建file

2.开辟文件缓冲区空间,加载文件数据(延后)

3.查看进程的文件描述符

4.file地址填入对应下标

5.返回下标

write

cpp 复制代码
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

read

cpp 复制代码
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

无论读写。都必须在合适的时候,让操作系统吧文件的内容读到缓冲区。

在C语言中,FILE是一个结构体,一定封装描述符fd。

文件操作还是建议用语言提供的文件方法,因为平台不同,系统调用接口不同。

相关推荐
开心大爆炸3 小时前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
oushaojun23 小时前
大厂 C++ 面试:深度剖析 Linux Signal 信号机制(转)
linux
苏生Susheng4 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
Ruiery4 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
分支预测失败4 小时前
RISC-V AIA 中断架构实战:从 PLIC 到 APLIC 与 IMSIC 的迁移
linux·后端
GeW4 小时前
RHCE学习拿证计划:锁定核心考点,实现备考效率最大化
linux
snow@li5 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
苏生Susheng5 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
额额额对了5 小时前
Linux 进程间通信(IPC)核心机制:消息队列、共享内存与信号量详解
linux·网络·网络协议
zx_741484816 小时前
【Linux入门】Linux 安装:VMware Workstation Pro 安装 CentOS 7 保姆级图文教程
linux·centos