了解linux内核中进程级别的文件结构体【files_struct】以及文件io模型的初步演示,可以帮助我们更好地理解linux系统中的文件管理机制。以下是详细的介绍和演示:

一.区分内核文件结构体file和files_struct与C标准库中文件结构体FILE

二.文件描述符fd与进程文件描述符表fd_array
files_struct结构体介绍
files_struct结构体是Linux内核中定义的一个结构体,用于表示进程级别的文件描述符表。在Linux系统中,每个进程都有一个与之关联的文件描述符表,该表记录了该进程当前打开的所有文件的信息。以下是files_struct结构体的一些关键字段:

文件描述符fd与文件描述符表介绍
fd_array是一个指针数组,用于存储指向file结构体的指针。每个指针都指向一个打开的文件的file结构体,而文件描述符fd就是该指针数组的下标。注意:进程运行的时候默认会打开标准输入、标准输出、标准错误,占用了fd0、1、2位,为了让程序员默认进行输入输出代码编写(0、1、2对应的物理设备一般是:键盘、显示器、显示器)。files_struct结构体中有一块区域用于存储这些信息。

文件描述符的分配规则
文件描述符的分配规则总结:寻找最小的,没有被使用的数据的位置,分配给指定的打开文件!
【1】演示:(用到关闭文件描述符的系统调用:close)
输出结果为fd:3
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
int fd = open("myfile", O_RDONLY);
if(fd == -1) {
perror("open");
return 1;
}
printf("fd: %d\n", fd);
close(fd);
return 0;
}关闭0或者2结果:关闭0时输出fd:0,关闭2时输出fd:2
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
close(0); // 或者 close(2);
int fd = open("myfile", O_RDONLY);
if(fd == -1) {
perror("open");
return 1;
}
printf("fd: %d\n", fd);
close(fd);
return 0;
}通过以上内容,我们可以更好地理解Linux内核中文件管理的机制,特别是文件描述符和文件结构体的关系。
以上就是【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号