Intereting Posts
Убивать дочерние родительские процессы в одной команде Восстановление суперблока RAID1 man -k не возвращает результатов В сценарии оболочки bash может быть $ 2 равным нескольким аргументам в командной строке или мне нужны $ 3, $ 4 и т. Д. …? Получение списка слов из словаря формата DICT Почему «/» имеет запись «..»? Как я могу создать монтировку unionfs-fuse, которая читается всеми? Вложенный «awk» в цикле «while», проанализируйте два файла по строкам и сравните значения столбцов Как bash на самом деле изменяет stdin / stdout / stderr при использовании перенаправления / трубопровода не удалось открыть соединение с хостом, на порту 5887: соединение не выполнено Как хорошо выровнять таблицу отображения $ BASHPID И $$ отличаются в некоторых случаях Tmux – Получить панель # каждой панели в окне из сценария? Использование Awk для печати нужных строк в nslookup Список всех каталогов, которые НЕ имеют файл с заданным именем файла внутри

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

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

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

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

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

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

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