5

是否有可能编写一个能够获取另一个应用程序的打开文件描述符并仅传递其内容而不进行任何转换的程序?

假设 App A 有一个打开的 FD,指向它正在写入数据的磁盘上的某个文件。

我希望能够以某种方式访问​​打开的 FD,以便每当应用程序 A 将数据写入该文件时,我都可以将该写入广播到对该操作感兴趣的其他应用程序。

我希望能够在打开的 FD 上多路复用读/写操作。

一个更具体的例子;我有一个 midi 键盘和一些合成器,我希望能够打开 midi 键盘文件描述符并将所有传入的写入操作传递给 0-N 感兴趣的合成器。

4

1 回答 1

1

strace有一个选项可以完成您想要的主要部分。

       -e 写=设置
                   对所有文件执行完整的十六进制和 ASCII 转储
                   数据写入规范中列出的文件描述符
                   定集。例如,查看所有输出活动
                   在文件描述符35上使用-e write= 3 , 5。笔记
                   这与正常的追踪无关write (2) 系统调用
                   由
                   选项-e trace=write
  • 如果您的应用A已经在运行:strace -ewrite -ewrite=FD -pPID
  • 如果您的应用A尚未启动:strace -ewrite -ewrite=FD A

将生成的十六进制转储转换回原始数据并将其提供给其他应用程序是微不足道的。

于 2018-05-18T06:21:17.323 回答