Назад | Перейти на главную страницу

псевдо файлы linux для вращения потоков

У меня проблема с вращением файлов. Ситуация следующая:

  1. одна программа, такая как wirehark или vlc, выгружает все в один файл, скажем netstream.bin
  2. Если я mv netstream.bin в netstream.bin.rotate, программа все равно будет писать в netstream.bin.rotate.
  3. Поскольку это дамп потока, этот файл становился все больше и больше

Есть ли решение, как повернуть эти файлы?

Что-то вроде псевдо файла FILO:

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

Мой вопрос также звучит как "Как изменить файловый дескриптор программы, чтобы записать другой файл"

FIFO может не подойти вам. Там должен будь читателем с другой стороны, иначе писатель заблокирует. Кроме того, как только читатель перестанет читать fifo, писатель выйдет из строя с поломанной трубкой.

logrotate в основном может помочь вам, но за счет возможной потери некоторых данных.

  1. Добавить в данный файл в режиме добавления (что подойдет большинству систем регистрации).
  2. Пока данные записываются, дословно скопируйте весь файл под новое имя.
  3. Обрежьте исходный файл до нуля, оставив его там, где он есть.

Проблема потери данных возникает между этапами 2 и 3. Возможно, что в файл будет записано больше данных после того, как копия файла скопировала то, что, по ее мнению, было концом файла. Когда происходит шаг 3, вы обрезаете (и теряете) данные, которые вы пропустили во время копирования.

В зависимости от того, насколько вам это нужно, альтернативой может быть написание программы, которая всегда читает из файла fifo, но при этом записывает данные в разные места в зависимости от некоторых условий (например, получает сигнал). Это был бы чистый способ сделать это, но сначала вам нужно написать эту программу!