学习视频链接
目录
一、PCB进程控制块
1、write 完成了把数据从用户区送到内核区
2、PCB 进程控制块本质是一个结构体,其中有一个成员是指针,这个指针指向文件描述符表,表里面存放的是文件描述符。
二、文件描述符表
1、简介
我们这两天看到的文件描述符是数字,其实是数字和指针的键值对,指针指向文件结构体,文件被open打开了,返回给我们文件描述符的数字。
为什么我们是操作文件描述符的数字呢?因为系统不想让我们看到指针和封装细节。我们拿到了文件描述符就能操作文件了,系统实现细节我们不用关心。
2、代码演示
得到文件描述符是 3,
3、为什么文件描述符是 3 呢?
因为先打开了标准输入文件、标准输出文件、输出错误信息文件,后面打开的信息往下排
一个进程能打开的文件上限是1024个,所以最大文件描述符是1023
这个值是可以修改,但要重新编译内核
4、如果打开了 3 4 5 三个文件删除 3,后面创建的文件放在 3 的位置,因为遵循存放在可用的最小位置的原则
5、后面可以用数字操作
0——STDIN_FILENO
1——STDOUT_FILENO
2——STDERR_FILENO
三、最大打开文件数
命令查看 ulimit -a 查看 open files 对应值。默认为 1024
可以使用 ulimit -n 4096 修改
当然也可以通过修改系统配置文件永久修改该值,但是不建议这样操作
cat /proc/sys/fs/file-max 可以查看该电脑最大可以打开的文件个数。受内存大小影响
四、FILE结构体
1、主要包含文件描述符、文件读写位置、I0 缓冲区三部分内容
struct file {
...
文件的偏移量;
文件的访问权限;
文件的打开标志;
文件内核缓冲区的首地址;
struct operations *f_op;
...
};
2、查看方法:
/usr/src/linux-headers-3.16.0-30/include/linux/fs.h