[Linux]文件基础-如何管理文件

回顾C语言之 - 文件如何被写入

fopen fwrite fread fclose fseek ...

这一系列函数都是C语言中对文件进行的操作:

c 复制代码
int main()
{
    FILE* fp=fopen("text","w");
    char str[20]="write into text";
    fputs(str,fp);
    fclose(fp);
    return 0;
}

而上述C语言指令本质上都是封装了操作系统的指令实现了具体操作,例如:fopen封装了open,fclose封装了close,所以不用C语言提供的fopen...函数,也可以实现文件操作

c 复制代码
int main()
{
    int fd=open("text",O_WRONLY|O_CREAT|O_TRUNC,0666);
    char str[100]="write into text";
    write(fd,str,sizeof(str));
    close(fd);
    return 0;
}

Linux中的文件是怎么被管理的

了解OS中对文件的基本操作后,已经能够自行管理文件,如何决定想要管理的文件是那个呢?现在开始探究文件是如何被管理的

1、想要对文件进行操作,需要先打开文件

电脑的内存容量是偏小的,所以文件都会被保存在磁盘上面。只有当进行操作的时候,才会加载到内存中

2、谁来打开这些文件

这些文件都是由进程负责打开和关闭,而对其进行管理则需要用到文件描述符fd

3、fd(文件描述符)是什么

文件描述符概括来说就是一个描述符对应一个文件,每当一个文件被打开,都会被赋予一个文件描述符

​

下图便是Linux中对于文件管理所用的结构体

在task_struct中,存在files_struct结构体,用来保存文件通用的一些最基本属性。

在该结构体中又存在一个file结构体数组,用来保存具体文件,而前文所说的fd 代表的就是这个数组fd_array 的下标(即每一个下标对应一个文件)。

其中,在fd_array 中,前3个下标位置默认由stdin stdout stderr 占用

c 复制代码
/*下面是Linux中这几个结构体的内容*/
struct task_struct {
    ...
    struct files_struct *files;
    ...
}
struct files_struct {
	atomic_t count;
	struct fdtable *fdt;
	struct fdtable fdtab;
	spinlock_t file_lock ____cacheline_aligned_in_smp;
	int next_fd;
	struct embedded_fd_set close_on_exec_init;
	struct embedded_fd_set open_fds_init;
	struct file * fd_array[NR_OPEN_DEFAULT];
};
struct file {
	struct file *next;
	struct file *parent;
	char *name;
	int lineno;
	int flags;
};
相关推荐
Lsetea7 分钟前
OpenSSL报certificate chain too long:error 22与verify_depth深度排查
linux·https·ssl证书·openssl·证书链
不像程序员的程序媛1 小时前
linux常见文本操作命令
linux·运维·服务器
wangbing11252 小时前
开发指南149-IotDB-常用命令
linux·运维·iotdb
看着博客敲代码2 小时前
WorkBuddy 接上 Kali MCP 做自动化渗透:信息收集到初步验证的落地记录
linux·人工智能·安全·网络安全·自动化
蜗牛互联网3 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
小HANN3 小时前
华为云企业网站上云实战|从零搭建高可用WordPress全站架构(ECS+RDS+ELB+弹性伸缩+云监控闭环)
linux·运维·服务器·经验分享
星恒随风4 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
GeW4 小时前
2026新质生产力路线图:Linux、数据库与智能算力融合报告
linux
AR-26710-4 小时前
Linux Day19——日志轮转
linux·运维
祖力555 小时前
驱动工程搭建与字符设备驱动框架
linux·运维·服务器·内核·arm·imx6ull·驱动