Захват данных, записываемых в открытый файловый дескриптор

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

Допустим, приложение 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

Преобразовать полученный шестнадцатеричный дамп обратно в необработанные данные тривиально и передать их в другие приложения.

Другие вопросы по тегам