我们有一个“库”(我们宁愿不更改的代码选择),它是从它可以直接访问 2 个文件的角度编写的。它直接在文件描述符上使用“open”、“read”和“seek”posix 调用。
但是,现在我们有一个不能通过标准 IO 调用访问的专有文件系统。鉴于我们不想重新编写代码,如果我们可以将 IO 调用重定向到可以用作接口的已知函数,那就太好了。
有什么方法可以更改上面使用的调用,以便可以用新的函数调用覆盖“读取”和“搜索”?
谢谢。
我们有一个“库”(我们宁愿不更改的代码选择),它是从它可以直接访问 2 个文件的角度编写的。它直接在文件描述符上使用“open”、“read”和“seek”posix 调用。
但是,现在我们有一个不能通过标准 IO 调用访问的专有文件系统。鉴于我们不想重新编写代码,如果我们可以将 IO 调用重定向到可以用作接口的已知函数,那就太好了。
有什么方法可以更改上面使用的调用,以便可以用新的函数调用覆盖“读取”和“搜索”?
谢谢。
当您说您不想更改库代码时,您的意思是您想使用现有的二进制代码,还是只使用源代码?如果你有源码并且可以重新编译,我会-Dread=my_read -Dopen=my_open
在构建库时简单地将 etc. 传递给编译器,然后提供你自己的my_read
etc. 函数。
您可以尝试的一件事是库函数插入。
除了已经提到的函数插入和使用宏重命名函数调用之外,另一个仅限 Linux 的选项是使用Filesystem in Userspace。通过这种方式,您可以使使用标准 POSIX 文件系统 API 的其他应用程序可以访问您的专有文件系统。FUSE hello world 示例非常短。