我们有一个“库”(我们宁愿不改变的代码选择),它是从它可以直接访问2个文件的角度编写的。它直接在文件描述符上使用“open”,“read”和“seek”posix调用。
但是,现在我们有一个无法通过标准IO调用访问的专有文件系统。看到我们不想重新编写代码,如果我们可以将IO调用重定向到可以用作接口的已知函数,那将会很棒。
有没有办法改变上面使用的调用,以便用新的函数调用覆盖“read”和“seek”?
感谢。
答案 0 :(得分:4)
当您说您不想更改库代码时,您是说要使用现有的二进制代码,还是仅使用源代码?如果您有源代码并且可以重新编译,我只需在构建库时将-Dread=my_read -Dopen=my_open
等传递给编译器,然后提供您自己的my_read
等函数。
答案 1 :(得分:3)
您可以尝试的一件事是library function interposition。
答案 2 :(得分:1)
除了已经提到的函数插入和使用宏重命名函数调用之外,另一个仅使用Linux的选项是使用Filesystem in Userspace。这样,您可以使用标准POSIX文件系统API的其他应用程序访问您的专有文件系统。 FUSE hello world example令人惊讶地短暂。