🌈 style:

This commit is contained in:
lzy
2024-06-23 17:45:58 +08:00
parent 5598552b22
commit a5172579e3
16 changed files with 138 additions and 393 deletions

View File

@@ -1,10 +1,11 @@
# 目录
- [目录](#目录)
- [I/O操作](#io操作)
- [标准IO](#标准io)
- [文件IO/系统调用IO](#文件io系统调用io)
- [文件描述符的概念](#文件描述符的概念)
- [文件IO操作相关函数](#文件io操作相关函数)
- [文件IO操作相关函数](#文件io操作相关函数)
- [例题通过文件IO处理csv表格](#例题通过文件io处理csv表格)
- [文件IO与标准IO的区别](#文件io与标准io的区别)
- [IO的效率问题](#io的效率问题)
@@ -17,7 +18,6 @@
- [同步](#同步)
- [/dev/fd/目录](#devfd目录)
# I/O操作
输入输出是一切实现的基础。
@@ -28,8 +28,6 @@
优先使用**标准IO**,兼容性更好,还有合并系统调用的优势。
## 标准IO
```c
@@ -205,23 +203,17 @@ FILE *tmpfile(void);
```
## 文件IO/系统调用IO
文件描述符(`fd`是在文件IO中贯穿始终的类型。
### 文件描述符的概念
是一个整型数,是一个指针数组的下标。
优先使用当前可用范围内最小的。
### 文件IO操作相关函数
### 文件IO操作相关函数
- `open`
- `close`
@@ -305,8 +297,6 @@ off_t lseek(int fd, offt offset, int whence);
```
### 例题通过文件IO处理csv表格
```csv
@@ -320,8 +310,6 @@ off_t lseek(int fd, offt offset, int whence);
可以使用16进制查看工具
### 文件IO与标准IO的区别
区别:响应速度&吞吐量
@@ -330,17 +318,11 @@ off_t lseek(int fd, offt offset, int whence);
响应速度快就文件IO吞吐量大就标准IO。
> [!warning]
> 二者不可混用
转换方法:`fileno`, `fdopen`
### IO的效率问题
#### 习题
@@ -399,8 +381,6 @@ rm $dst
```
#### 结果
```bash
@@ -424,8 +404,6 @@ Max BUFSIZE before segfault: 8388608
`ulimit -a`中,我的系统的`stack size``8192`,所以`BUFSIZE`不能超过`8192`,否则会段错误。与测试结果一致。
### 文件共享
多个任务共同操作一个文件或者协同完成任务
@@ -465,8 +443,6 @@ p1->read -> p2->write
```
### 原子操作
指不可分割的操作
@@ -475,8 +451,6 @@ p1->read -> p2->write
`tmpnam`函数,产生文件名和创建文件是两步,会有并发问题。
### 程序中的重定向:`dup`, `dup2`
```c
@@ -489,8 +463,6 @@ int dup(int oldfd);
int dup2(int oldfd, int newfd);
```
### 同步
同步内核层面的buffer和cache
@@ -508,8 +480,6 @@ int ioctl(int fd, unsigned long request, ... /* arg */);
```
### /dev/fd/目录
**虚目录**:显示当前进程的文件描述符信息
**虚目录**:显示当前进程的文件描述符信息