Linux学习日记9——文件描述符

学习视频链接

黑马程序员-Linux系统编程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1KE411q7ee?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click

目录

一、PCB进程控制块

二、文件描述符表

三、最大打开文件数

四、FILE结构体


一、PCB进程控制块

1、write 完成了把数据从用户区送到内核区

2、PCB 进程控制块本质是一个结构体,其中有一个成员是指针,这个指针指向文件描述符表,表里面存放的是文件描述符。

Linux学习日记9——文件描述符_第1张图片

二、文件描述符表

1、简介

我们这两天看到的文件描述符是数字,其实是数字和指针的键值对,指针指向文件结构体,文件被open打开了,返回给我们文件描述符的数字。

Linux学习日记9——文件描述符_第2张图片

 为什么我们是操作文件描述符的数字呢?因为系统不想让我们看到指针和封装细节。我们拿到了文件描述符就能操作文件了,系统实现细节我们不用关心。

2、代码演示

Linux学习日记9——文件描述符_第3张图片

Linux学习日记9——文件描述符_第4张图片

得到文件描述符是 3,

3、为什么文件描述符是 3 呢?

因为先打开了标准输入文件、标准输出文件、输出错误信息文件,后面打开的信息往下排

Linux学习日记9——文件描述符_第5张图片

 一个进程能打开的文件上限是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

你可能感兴趣的:(linux,linux,文件描述符)