一、Linux文件结构
Linux文件本质上是一个struct
1. 查看Linux文件定义
查看定义 FILE 到底做了什么。可以看出是给 名叫 “_IO_FILE ”的 struct 重命名为 “FILE”。
1.1. 文件本质是struct,这个struct有哪些内容
struct _IO_FILE {
int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
#define _IO_file_flags _flags
/* The following pointers correspond to the C++ streambuf protocol. */
/* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
char* _IO_read_ptr; /* Current read pointer */
char* _IO_read_end; /* End of get area. */
char* _IO_read_base; /* Start of putback+get area. */
char* _IO_write_base; /* Start of put area. */
char* _IO_write_ptr; /* Current put pointer. */
char* _IO_write_end; /* End of put area. */
char* _IO_buf_base; /* Start of reserve area. */
char* _IO_buf_end; /* End of reserve area. */
/* The following fields are used to support backing up and undo. */
char *_IO_save_base; /* Pointer to start of non-current get area. */
char *_IO_backup_base; /* Pointer to first valid character of backup area */
char *_IO_save_end; /* Pointer to end of non-current get area. */
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
1.2 有三项需要注意
a 文件读写指针
b. 文件缓存区,起始地址和终止地址
c. 文件描述符,int值
二、 虚拟地址空间
2.1. 虚拟地址大小和系统位数有关,32位系统是2的32次方,也就是4G,64位大概是2的48次方
2.2. 虚拟内存会通过MMU(内存管理单元)映射到实际的物理内存上。MMU负责虚拟地址到实际内存物理地址的映射。
2.3. 分为两部分:内核区、用户区。堆栈、共享库、环境变量等都放在用户区,内核区的部分用户不能读也不能写。
2.4. 只能通过系统调用访问内核区的东西。
三、 文件内存空间
1. 掌握内存结构
1.1. 文件描述符,在文件的内核区。有一个PCB模块管理,PCB里面有一个数组,这个数组就是文件描述符表。
1.2. 文件描述符表:默认1024.即默认一个进程最多可以打开1024个文件。
1.3. 前三个文件描述符位置默认被占用,即每个进程默认打开 3个 文件。
标准输入、标准输出、标准错误。指向的文件的就是终端,linux中一切皆文件,终端也是文件。