Linux的伪文件旋转stream

我有一些旋转文件的问题。 下一个情况是:

  1. 像wireshark或vlc这样的程序全部转储到一个文件,比如说netstream.bin
  2. 如果我mv netstream.bin netstream.bin.rotate程序仍然会写入netstream.bin.rotate。
  3. 因为它是stream转储,这个文件会变得越来越大

有没有什么解决scheme,如何旋转这个文件?

像FILO伪文件:

mkfilo /tmp/stream.buffer ./scrtip/program.bin -o /tmp/stream.buffer get_out_filo(stream.buffer) > netstream.bin 

我的问题也听起来像“如何更改程序文件描述符写入另一个文件”

一个fifo可能不适合你。 另一方面必须有读者,否则作者会阻止。 另外,一旦读者不再阅读fifo,作者将用一根破损的pipe子退出。

logrotate可以帮助你,但它的代价是可能会丢失一些数据。

  1. 以附加模式追加到给定的文件中(大多数日志logging系统都会这样做)。
  2. 在写入数据的同时,将整个文件逐字复制到一个新名称。
  3. 将原始文件截断为零,保持原来的位置。

丢失数据的问题发生在第2步和第3步之间。在文件副本复制了它认为是文件结尾的文件之后,可能会有更多的数据写入文件。 当出现第3步时,会截断(并丢失)在复制过程中丢失的数据。

取决于你需要多less,另一种方法是编写一个总是从fifo文件中读取的程序,然后根据某些条件(例如接收信号)将数据写入不同的地方。 这将是一个干净的方式来做到这一点,但你需要先写这个程序!