我可以将进程的输出重定向到文件

./prog > a.txt

但是如果我删除了a.txt并且没有重新启动prog,那么就不会有更多的输出进入a.txt。如果我使用append redirect>>,情况也是一样的。
在prog运行时删除文件时,是否有方法使我的重定向重新创建该文件?
重定向是操作系统的一部分,而不是prog。所以可能有一些工具或设置。
谢谢!

最佳答案

在操作系统级别,文件由许多组件组成:
存储在存储设备某处的内容;
保存除名称以外的所有文件信息的i节点;
目录中列出的名称(也存储在存储设备上);
当文件打开时,打开它的每个应用程序都会处理保留部分文件内容的内存缓冲区。
所有这些都是链接的,操作系统保留它们的预订。
如果在文件被另一个应用程序打开时删除该文件(重定向操作符>将其保持打开状态,直到./prog完成),则只会从目录中删除该名称。拼图的其他部分仍然存在,它们一直工作,直到最后一个保持文件打开的应用程序关闭它。当文件内容在存储介质上被丢弃时。
如果删除该文件,而./prog仍在运行并生成输出,则该文件会增长并使用存储介质上的空间,但无法再次打开,因为无法访问该文件。只有当文件被删除时已经打开的程序才能访问该文件,直到它们关闭它。
即使您重新创建了该文件,它也是一个与已删除文件同名的不同文件。./prog不受影响,其输出将转到已删除的旧文件。
当其输出被重定向时,除了重新启动./prog,当删除a.txt时,无法说服它将其输出存储在其他文件中。
如果./prog将自己写入a.txt中,有几种方法可以实现这一点(它们都需要更改./prog的代码)。

关于linux - 输出重定向应重新创建目标文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50226469/

10-11 22:04
查看更多