目录
一、Linux系统IO和C标准库IO
1.1 标准C库IO函数
1.2 标准C 库IO和 Linux系统IO的关系
标准C 库IO:带缓冲区
Linux系统IO:不带缓冲区,(有些书上说Linux系统有缓存,那是内核的缓存,不是IO的缓存)
二、 虚拟地址空间
下图以32位机为例,2的32次方为4G,64位机是2的64次方,太大了不好画。
三、文件描述符表和文件描述符
- 文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。
- 每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。
文件描述符表默认大小: 1024,每个进程启动之后, 都有一个文件描述符表,所以每个进程默认能打开的文件个数: 1024
前三个文件文件描述符是默认被使用了的: - 标准输入 -> 0, 标准输出 -> 1, 标准错误 -> 2
除去被占用的每个进程默认能打开的文件个数: 1021
6.1 dup和dup2函数
-
dup 复制文件描述符
#include <unistd.h>
int dup(int oldfd);
例子:
int ret = dup(3);
值==3的文件描述符指向一个文件a.txt,返回值是从空闲的文件描述符表中找到的最小的一个, 这时候 4 也指向a.txt