Захват данных, записываемых в дескриптор открытого файла - PullRequest
0 голосов
/ 07 мая 2018

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

Допустим, приложение A имеет открытый FD для какого-либо файла на диске, в который он записывает данные.

Я хотел бы иметь возможность каким-то образом получить доступ к открытому FD, чтобы в любое время приложение A записывало данные в этот файл и передавало их в другое приложение, заинтересованное в этой операции.

Я бы хотел иметь возможность мультиплексировать операции чтения / записи на открытом FD.

Более конкретный пример; У меня есть MIDI-клавиатура и некоторые синтезаторы, я хотел бы иметь возможность открыть дескриптор файла MIDI-клавиатуры и передать все входящие операции записи интересующим 0-N синтезаторам.

1 Ответ

0 голосов
/ 18 мая 2018

strace имеет опцию, которая выполняет основную часть того, что вы хотите.

       <b>-e write=</b>set
                   Perform a full hexadecimal and ASCII dump of all the
                   data written to file descriptors listed in the spec-
                   ified  set.  For example, to see all output activity
                   on file descriptors <i>3</i> and <i>5</i> use <b>-e write=</b><i>3</i><b>,</b><i>5</i>.   Note
                   that  this is independent from the normal tracing of
                   the <b>write</b>(2) system call which is controlled by  the
                   option <b>-e trace=write</b>.
  • , если ваше приложение A уже запущено: strace -ewrite -ewrite=<i>FD</i> -p<i>PID</i>
  • , если ваше приложение A еще не запущено: strace -ewrite -ewrite=<i>FD</i> <i>A</i>

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

...