我希望能够(以编程方式)移动(或复制和截断)经常使用和写入的文件。这会导致写入的文件永远不会太大。
这可能吗?无论是Windows还是Linux都可以。
具体到我要做的是用FFMPEG录制视频并创建一小时视频。
答案 0 :(得分:2)
Windows和Linux都可以,但需要在相关应用程序之间进行合作。如果正在将新数据写入文件的应用程序不知道其他应用程序正在做什么,那么它可能不起作用(嗯......有可能......稍后再回过头来看。)
通常,要使其工作,您必须打开共享文件。例如,如果使用Windows API CreateFile,则两个应用程序可能都需要指定FILE_SHARE_READ
和FILE_SHARE_WRITE
。这将允许两个(多个)应用程序“同时”读取和写入文件。
除了共享文件之外,还需要协调应用程序之间的操作。您需要使用某种锁定机制(通过锁定文件的某些部分或某些共享的互斥锁/信号量)。请注意,如果使用文件锁定,则可以锁定文件中的某个已知偏移量以充当“信号量”(它甚至可以是超出文件物理端的字节值)。如果一个应用程序在与另一个应用程序截断它的同一时间附加到该文件,则会导致不可预测的结果。
返回关于两个应用程序需要彼此了解的注释...如果两个应用程序都独占打开文件并保持重试操作直到成功,则可能执行操作,然后关闭文件,它基本上允许他们在没有彼此“知识”的情况下工作。但是,这可能不会很好,效率也不高。
说了这么多之后,您可能会因为效率原因而考虑替代方案。例如,如果可以让写入应用程序定期写入新文件,那么它可能比不断地将数据从一个文件“移动”到另一个文件更有效。此外,如果您需要维护文件的某些部分(例如,将前100 MB移至另一个文件,然后将第二个100 MB移至开头),这也可能是相当昂贵的操作。
答案 1 :(得分:0)
logrotate将是一个很好的选择是Linux,几乎任何发行版的股票。我确定那里有一个类似的Windows服务