为什么我的LD_PRELOAD拦截适用于打开/关闭但不适用于fopen / fclose?

时间:2013-01-14 20:22:55

标签: c++ c ld-preload

我正在尝试使用LD_PRELOAD来拦截打开/关闭的调用。我对close()的测试实现只是

int close(int fd) {
  fprintf(stderr, "TEST\n");
  return syscall(SYS_close, fd);
}

我有一个测试程序

int handle=open("test.txt", O_WRONLY|O_CREAT, 0644);
close(handle);
FILE *f = fopen("test.txt", "w");
fclose(f);

问题是:我的LD_PRELOAD代码成功拦截了close()调用,但无法拦截由fclose()生成的close()系统调用,尽管从strace输出两个系统调用看起来完全相同。

我知道我可以编写我对fclose()的拦截,它也适用于C ++的ofstream :: close()。但是,我对open()/ fopen()的拦截仍不适用于C ++的ofstream :: ofstream()。我怎样才能确保拦截所有打开或关闭文件的调用,无论哪个包装函数调用它们?谢谢!

0 个答案:

没有答案