Intereting Posts
Заголовок окна в X показывает неправильное имя приложения Вызов сценария не по тому же пути Использование awk для идентификации числа одинаковых столбцов Почему sudo openvpn не может работать здесь? Локально запретить вход для пользователей, прошедших проверку подлинности через LDAP функция поиска в unix Сохранение состояния и данных конфигурации в загрузочном USB Как я могу проверить, установлено ли я несвободное программное обеспечение? Как распределяется пользовательский идентификатор пользователя группы пользователей контейнера? Альтернатива ArpRetryCount в CentOS Каждые несколько минут звук сбрасывается Проверьте, какие ключи ssh приняты на сервере Как я могу уловить код выхода команды для более позднего, в Makefile? Как вы обрабатываете несколько правил валидации при различных пользовательских вводах? Ошибка загрузки Debian: «ata3: не удалось выполнить сброс настроек (устройство не готово)»

перехватывает запись в файл

Это может быть невозможно, но … У меня есть стороннее приложение (бормотание для любопытных), которому можно сказать, чтобы открыть файл для записи (я предоставляю имя), и выгружать в него байты, пока не будет приказано остановиться. Он не открывает файл для добавления, и если файл уже существует, он меняет имя и пытается снова. Все хорошо, хорошо и довольно стандартно. Он может писать часами (и с удовольствием заполнит диск, в чем проблема).

Я хочу перехватить все, что он пишет, и прочитать его из другого процесса; в идеале он никогда не попадет на диск, но я приму компромиссы, когда некоторые из них это сделают.

Очевидное решение – читать файл в том виде, в котором оно написано, truncate (), то, что я читаю и читаю снова, не будет работать для меня, потому что файл не станет меньше, когда я усекаю – бормотание не определяет append, поэтому будет продолжать писать там, где остановился. В идеале мне нужен какой-то способ, чтобы обмануть его, думая, что он создан и пишет нормальный файл, в то время как на самом деле он просто передает все это мне. Я не хочу писать свой собственный код для файловой системы (если это не намного проще, чем кажется).

В конечном итоге я хочу получить записанный звук, hashировать его и передавать в / dev / random. Просто указание mumble на / dev / random не работает, потому что / dev / random существует, поэтому он не будет его использовать.

есть хитрый трюк для этого? Если нет, то есть ли способ написать код пользователя, который выглядит как каталог? Если ничего не помогает, достаточно ли просто написать файловую систему, которая может делать то, что мне нужно?

Вы можете использовать LD_PRELOAD, чтобы Mumble загружал указанную вами библиотеку перед всеми остальными библиотеками. Вы можете написать небольшую библиотеку с пользовательскими open() / stat() / etc, которая, в зависимости от имени файла, либо передает вызов стандартной библиотеке C для стандартного поведения, либо делает что-то особенное, чтобы обмануть бормотание.