ed再研究(ed的临时文件与sed -i的临时文件区别)

本文详细探讨了ed编辑器的工作原理,尤其是它如何使用临时文件(称为scratch_file)来保存文件镜像。与sed -i不同,ed在内存中维护一个line_buffer,并结合临时文件进行编辑操作。通过strace命令分析ed的执行过程,揭示了ed在处理文件行读写时如何根据line_buffer和scratch_file交互,即使在文件内容改变后,原始数据仍保留在临时文件中,新内容追加到后面。这种设计体现了Unix编程哲学,允许处理大数据文件而不消耗过多内存。
摘要由CSDN通过智能技术生成

趁热打铁

 

前边讨论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

源码定义结点如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值