目录流

改变文件的权限

如何查看类型别名的具体定义

获取当前工作目录

改变当前工作目录

创建目录

删除目录

打开目录流

关闭目录流

读目录流

dirent结构体

seekdir和telldir函数

倒带目录流

stat系统调用函数

stat结构体

无缓冲文件流

打开文件open

标志描述/含义
O_RDONLY以只读的方式打开
O_WRONLY以只写的方式打开
O_RDWR以可读可写的方式打开
O_CREAT如果文件不存在,则创建文件。如果不添加此标志,那么文件不存在时,将打开失败
O_EXCL仅与O_CREAT连用,单独使用无意义。如果文件已存在,则open失败
O_TRUNC如果文件已存在且成功以写入模式打开,则将其长度截断为 0,即删除文件内容。
O_APPEND以追加模式打开文件,不能和O_RDONLY或者O_TRUNC连用。

close函数

read函数

write函数

ftruncate系统调用函数

文件映射

mmap函数

munmap函数

lseek函数

内存复制函数

重定向

文件流和文件描述符的关系

fopen 函数实际上在运行的过程中也获取了文件的文件描述符。

标准流和重定向

  1. 标准输入流stdin:宏STDIN_FILENO,对应整数值0

  2. 标准输出流stdout:宏STDOUT_FILENO,对应整数值1

  3. 标准错误流stderr:宏STDERR_FILENO,对应整数值2

标准流的文件对象-示意图

close和重定向的原理

close的作用是关闭了一个文件描述符,只有等到某个文件对象的全部文件描述符都被关闭了,才会考虑释放文件对象(引用计数法)

但标准流的文件对象,即便所有文件描述符都被关闭了,但一般操作系统也会继续保留它的文件对象(保留的目的当然是等待重新为标准流文件对象分配文件描述符)。

open的作用是打开一个文件,内核会创建文件对象,并分配一个当下可用的最小文件描述符,返还给用户进程。

重定向stdout-原理图

重定向不是断开/更改用户进程和标准流缓冲区的连接,而是断开/更改标准流缓冲区到外部设备(屏幕、磁盘等)的连接。

dup函数

dup函数原理-图

利用dup函数重定向stdout

重定向stdout-图1

dup2函数

利用dup2函数重定向stdout

重定向stdout-图2

有名管道

创建管道文件

使用管道

IO多路复用

Select

select的最基本的原理, 就是把要监视的文件描述符, 构建一个文件描述符监听集合。

这个集合交给select, select促使操作系统内核, 通过轮询的方式监听这个文件描述符集合。

直到监听集合中, 至少有一个文件按照条件就绪(条件:预设的监听是读就绪OR写就绪...), 这一次的select监听宣告结束, 并携带就绪的文件描述符集合返回, 继续执行用户书写的代码逻辑。

调用select之后, select会阻塞进程, 去监听设置的文件描述符状态; 直到监听到至少一个文件描述符就绪, select解除阻塞状态, 并携带就绪的文件描述符返回。

监听集合和监听完毕之后携带的就绪集合, 是同一个fd_set存储。(传入传出参数, 非const指针) (意味着在循环中, 每次都要重置监听集合set)