块缓冲和行缓冲
提高电脑的效率
块缓冲
机械磁盘分为盘片和磁头,磁头收缩在磁道上写东西。磁盘高速旋转,磁头不断写东西
所以不要开着机带着电脑到处走,因为磁盘和磁头距离太小,容易损伤
所以写东西的时候电脑完成的顺序是:
1.完成现在操作
2.找到要写的磁道的位置
3.开始写入
所以最好一次多写点,不然磁盘一直转一直转很费命。所以现在基本上是先攒着(块缓冲),攒够了一定数目之后一起写。缺点是这样的话容易造成误报。比如:写1k的东西,实际是留在了缓存区,但是标准IO提示已经完成写入。结果重新掉电之后,东西丢了(但实际上这点东西不太重要,而且有电池/电池,所以问题不大)
由此引申,把存储设备称为块(block)缓冲设备。
行缓冲
printf
就是一个行缓冲,遇到换行/程序结束/长时间/数据够多就输出。
<<: 定义分隔符
比如,cat不加宾语的时候
jskdalfeuiwu
jskdalfeuiwu
dsjaiogprei
dsjaiogprei
ska;gjriejng
ska;gjriejng
dskla;jio
dskla;jio
cat将会从标准IO中正向连续读入,读入一次输出一次,以换行为分隔符。(结束是ctrl + d)
如果对cat使用<<:
cat << EOF
则只有当输入EOF
才认为是结束输入,认为此时的EOF
是分隔符,EOF和任何别的如word效果一样(指定某个东西为分隔符)
heredoc> this
heredoc> is a
heredoc> test
heredoc> EOF
this
is a
test