我正在编写ed(是的,编辑器)源代码。 该程序使用一个用tmpfile打开的临时文件作为缓冲区。 但是,每当我运行程序时,lsof总是将临时文件报告为已删除! (事实上它并不存在)。为什么呢?
答案 0 :(得分:0)
由于文件可以存在于磁盘上而没有与文件名关联的文件,因此许多程序会打开文件,然后立即取消链接。文件内容可以继续通过文件上的打开文件句柄进行修改和读取,并且在关闭所有打开的文件句柄之前,实际上不会从磁盘上将其删除。
(这是针对* nix / POSIX平台AFAICT的; Windows处理文件的方式不同,如果程序仍打开文件句柄,则可以防止断开链接,因此通常需要重新启动才能进行升级以强制关闭那些打开的文件句柄因此可以替换文件内容)