c++ - 重定向文件访问

标签 c++ c linux filesystem-access

有没有办法监控和重定向线程或进程的文件访问?

例如,一个线程想要读取/etc/mysql/my.cnf,我想更改对 ~/my.cnf 的访问,或者如果我运行 touch/etc/test.config 我希望将文件重定向到 ~/somefolder/etc/test.config

我正在寻找一个适用于 Linux/Unix 的 C、C++ 库。

提前致谢

最佳答案

您可以编写一个在程序开始运行时预加载的共享对象。在 .so 中,您将重新定义 libc 函数 open()。当调用者(被愚弄的程序)作为参数传递字符串 /etc/mysql/my.cnf 时,您将改为打开 ~/my.cnf 并返回打开的文件描述符。来电者不会知道其中的区别。

您的共享对象当然需要调用“真实的”open() 来打开文件句柄;您可以使用 dlsym() 获取指向原始 libc 函数的指针。

这看起来过于复杂,但实际上并非如此,它就像一个魅力。我曾多次使用它来欺骗一个我没有源代码的程序;它就像发条一样工作。

如果您想查看概念证明,请查看 my blog我在哪里写的。编码愉快!

关于c++ - 重定向文件访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261972/

相关文章:

c++ - C++ 概念是存在类型的一种形式吗?

c++ - 为什么本地类型总是得到一个偶数地址

c - 计算错误 C uint64_t

c - 理解c中的语法难题

java - 分析 Linux 上的 Java 内存使用情况

python - 在 python 源代码中使用 __cplusplus

c++ - 带有自定义删除器的 std::shared_ptr 的 Typedef 别名

c - 使用 while 循环通过 scanf 用户输入

linux - 如何在字符串中捕获返回码并重新运行

c - 如何获取特定路径中已知文件的文件指针( FILE* )?