APUE Cahpter3

Unix 环境高级编程 第三章

这是一篇没有经过思考整理,单纯搬书的内容,不值得浪费时间去看

APUE思维导图 文件I/O

讲到一些 Uninx 下的文件操作函数,open creat read close fcntl 其中文件共享一节讲到了内核使用3种数据结构来表示打开的文件 1. 进程表项(每个进程会在进程表中有一个记录项,记录项中有一张此进程打开的文件描述符表)

  1. 文件表项(记录文件的文件状态标识,当前的文件偏移量和 v 节点指针)

  2. v节点表(记录文件类型和操作文件的函数指针还有 i 节点)

这里给出 APUE 中的图 fd 这张图还是比较详细的

讲到多进程模式下的文件操作,以及系统提供的对于文件的原子操作

read 中提到的预读(read ahead),读出多余应用需要的,预备下次使用,减少I/O write 中提到文件系统的延迟写(delayed write)的流程,先写高速缓冲区然后进队列,最后进磁盘,减少I/O 找到一个质量比较高的关于文件系统的资源,有兴趣的可以看看

lseek 文件中的空洞不占用磁盘块(已经验证),但是文件结尾的空洞会占磁盘块(未验证) 这里给出一个在 linux 上快速生成指定大小文件的命令 dd

dd if=/dev/zero of=file.txt count=1024 bs=1024

if 是要读取的文件 of 是要写入的文件 count 是要 copy 的次数 bs 是每次写入的字节数 dd 大多数时候用来测试操作系统的写入速度

fcntl O_SYNC 开启后我的实验结果和课本中提到的不一样(有空可以研究下为啥)

遇到了 git large file 的问题,对 git 原理还是不熟悉,要有耐心去读官方手册,然后实验,一味靠搜索解决不了根本的认知问题

习题3.5 比较有意思

  • ./command > outfile 2>&1

  • ./command 2>&1 >outfile

第一条会把 STDOUT_FILENO 重定向到 outfile,然后 dup 将 STDOUT_FILENO 复制到 STDERR_FILENO,即把 STDIN_FILENO 和 STDERR_FILENO 指向同一个文件表项。

第二条先把 STDERR_FILENO 复制到终端的 fd,STDERR_FILENO 和 终端fd 共享一个文件表项,然后把 STDOUT_FILENO 重定向到 outfile,也就是最终会把错误输出在终端,标准输出到 outfile。

这样解释还是不够详细,有时间还是得看 linux 内核关于 shell 部分的具体实现。

看到了一篇文章中提到程序员的剩余价值问题,处于金字塔最低端,要想办法成全自己。 利用自身优势去服务更多认可自己价值的人,才是正道,做自己的产品,提供基于自身的价值才是唯一的出路。

要多加思考不要别人喂什么就吃什么,脑袋会塞满垃圾的。


Recent posts

Leetcode30

ElasticSearch 系列(一)

Mysql 分区表实践

Kafka 入门

Hugo 安装


Related posts

APUE_Chapter5

APUE_Chapter4


Archives

2020 (11)
2019 (56)