我有一个文件log
。我需要从文件启动中删除一些字节,即n
个字节。问题是,此文件由其他程序中的其他文件指针引用,并且这些指针可能随时写入此文件log
。我无法重新创建新文件,否则文件指针会出现故障(我也不确定)。
我试图谷歌它但所有的建议只是重新写入新文件。
它有什么解决方案吗?
答案 0 :(得分:2)
我可以提出两个选择:
tail -F
实用程序永久跟踪日志内容。为避免多个程序操作同一文件的问题,您的日志记录代码可以将日志作为消息发送到单个日志记录守护程序。答案 1 :(得分:0)
所以...你想要改变文件,但你不能。你不能的原因是其他程序正在使用该文件。一般而言,您似乎需要:
停止所有其他程序在更改文件时弄乱文件 - 将现有的不需要的东西砍掉;
通知其他程序您已更改它 - 这样他们就可以重新建立文件指针。
我想必须有一种机制允许其他程序更改文件而不会相互绊倒...所以也许你可以扩展它? [如果所有其他程序都是主程序的子程序,那么如果所有程序都是O_APPEND
,那么你可能有机会这样做,也许是借助文件锁或信号量(可能已经存在) ?)。但如果这些程序密切相关,那么@jxh还有其他可能更好的建议。]
但是,如果您无法以任何方式更改其他程序,那么您似乎被卡住了,除了......
...也许你可以尝试稀疏'文件?在(最近的)Linux(至少)上,您fallocate()
可以使用FALLOC_FL_PUNCH_HOLE
删除您不想要的内容,而不会影响其他程序文件指针。当然,其他程序迟早会溢出文件指针,但这可能是一个理论上而不是实际问题。