Linux学习 05 Linux文件

82 阅读2分钟

一、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中一切皆文件,终端也是文件。