Есть ли способ сделать так, чтобы когда программы пытались выполнить seek()
операции с именованным каналом, он возвращался успешно (но действовал так, как если бы канал был пустым файлом) вместо «Незаконного поиска»?
У меня есть все последние записи в моей системе, хранящиеся в базе данных SQLite, у меня нигде нет файлов. Однако есть несколько программ, которые имеют проблемы с этим. Есть 2 конкретных случая;
- Программа хочет записать в файл журнала, который syslog-ng создал как именованный канал и который читает. Программа хочет выполнить
seek()
по какой-то причине, а затем не удается. - Программа (например, denyhosts или fail2ban) хочет читать из файла журнала, который syslog-ng создал как именованный канал и в который пишет. Программа хочет выполнить
seek()
на нем и терпит неудачу.
В идеале мне бы хотелось, чтобы эти запросы вели себя так, как будто именованный канал был просто пустым файлом. Я не вижу никакой причины, по которой программе, пишущей журнал, в любом случае нужно будет выполнять поиск, просто нужно открыть файл для добавления и начать запись. Я могу понять, почему чтение программы хотело бы искать, чтобы оно могло возобновить свою последнюю позицию, и поэтому я бы хотел, чтобы он вел себя так, как если бы файл был пуст (как будто он был усечен).
Так есть ли какая-либо опция, которая может быть установлена для именованных каналов, чтобы заставить их вести себя таким образом? Если нет, то есть ли режим, который можно установить, когда syslog-ng открывает канал, чтобы он так себя вел (я открыт для внесения изменений в код)? Или я до ручья?
F
команды less было бы достаточно, чтобы меньше обновляло экран, если он не получает никакого вывода в течение секунды или около того. Создание каналов для поиска не помогло бы: существующее различие заключается в том, что онF
идет в конец файла, а затем ожидает появления данных после конца, но для канала конец файла наступает только тогда, когда записывающее устройство закрывает файл.Если приложение вызывает поиск, оно либо не работает, либо не предназначено для работы с каналами. Если первое, то это нужно исправить. Если последнее, то оно ожидает, что стремление действительно сработает, поэтому ложь и утверждение, что это сработало, когда это не сработало, почти наверняка приведет к некорректной работе.
Также, если файл журнала заменяется именованным каналом, тогда только один процесс может читать из него одновременно. Это должно быть гнездо вместо.
источник