Захват данных, записываемых в открытый файловый дескриптор
Можно ли написать программу, которая может принимать дескрипторы открытого файла другого приложения и просто передавать их содержимое без какого-либо преобразования?
Допустим, приложение A имеет открытый FD для некоторого файла на диске, в который он записывает данные.
Я хотел бы иметь возможность каким-то образом получить доступ к открытому FD, чтобы в любое время приложение A записывало данные в этот файл, которые я могу транслировать и записывать в другое приложение, которое заинтересовано в этой операции.
Я хотел бы иметь возможность мультиплексировать операции чтения / записи на открытом FD.
Более конкретный пример; У меня есть MIDI-клавиатура и некоторые синтезаторы, я хотел бы иметь возможность открыть дескриптор файла MIDI-клавиатуры и передать все входящие операции записи в 0-N заинтересованных синтезаторов.
1 ответ
strace
есть опция, которая делает основную часть того, что вы хотите.
-e написать = установить Выполните полный шестнадцатеричный и ASCII дамп всех данные записываются в файловые дескрипторы, перечисленные в спецификации если установлен. Например, чтобы увидеть всю выходную активность для файловых дескрипторов 3 и 5 используйте -e write = 3 , 5. Заметка что это не зависит от обычной трассировки системный вызов write (2), который контролируется опция -e трассировка = запись.
- если ваше приложение A уже запущено:
strace -ewrite -ewrite=FD -pPID
- если ваше приложение A еще не запущено:
strace -ewrite -ewrite=FD A
Преобразовать полученный шестнадцатеричный дамп обратно в необработанные данные тривиально и передать их в другие приложения.