这可能是不可能的,但是......我有一个第 3 方应用程序(好奇地咕哝着),可以被告知打开一个文件进行写入(我提供了名称),并将字节转储到其中,直到被告知停止。它不会打开文件进行追加,如果文件已经存在,它会更改名称并重试。一切都很好,很好而且相当标准。它可以写几个小时(并且会很高兴地填满磁盘,这就是问题所在)。
我想拦截它写入的所有内容并从另一个进程中读取它;理想情况下,它根本不会进入磁盘,但我会接受其中一些妥协。
显而易见的解决方案是在文件写入时读取文件,truncate() 我读取并再次读取的内容对我不起作用,因为当我截断时文件不会变小 - mumble 没有指定追加,所以它将继续写它离开的地方。理想情况下,我需要一些方法来欺骗它,让它认为它创建并正在编写一个普通文件,而实际上它只是将它全部传递给我。我不想为此编写自己的文件系统代码(除非这比看起来容易得多)。
最终,我想获得录制的声音,将其散列并提供给 /dev/random。仅仅将 mumble 指向 /dev/random 是行不通的,因为 /dev/random 存在,所以它不会使用它。
有什么聪明的技巧吗?如果没有,有没有办法编写看起来像目录的用户态代码?如果一切都失败了,编写一个可以满足我需要的文件系统是否相当简单?
您可以使用LD_PRELOAD让 mumble 在所有其他库之前加载您指定的库。
open()
您可以使用自定义/ /etc编写一个小型库stat()
,根据文件名,它要么将调用传递给标准 C 库以实现标准行为,要么做一些特殊的事情来欺骗 mumble。