趁热打铁
前边讨论sed -i 与sed的差别时提到:ed实际上是全文拷贝到内存做镜象,通过编辑镜象和回写保存整个文件。
sed是流编辑器,对流有感性理解的人不难理解sed -i的临时文件的作用:做为流的输入
sed -i可以形象的比喻成:把一桶水原来的标签拿掉,换个新标签,通过“管道”将水倒进一个新的桶里
那么ed呢,ed是处理方式则是:把桶里的水“倒(实际上是复制)”到另一个桶里,直接对桶进行处理,再倒回原来的桶。
见man ed原文
cu上有版主提示说,ed是有临时文件的,但在man里并没有仔细的提及,细翻源码发现,确定有运行tmpfile()程序
tmpfile程序是stdio里包含的一个标准函数,通过创建一个临时文件返回描述符,
且在较的版本里,ed在创建tmpfile后,直接unlink 该文件
还可以通过lsof查看进程打开的临时文件:
文件虽然被unlink了,只要进程还在,描述符和资源仍在,
那么接下来自然会想到:ed的这个临时文件,跟sed -i的临时文件有何区别
这就要了解ed的临时文件的作用了
ed的临时文件叫:scrach_file
前文有提到,ed里内存保存的数据的内存结构叫:line_buffer
源码定义结点如下: