我正在尝试使用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()。我怎样才能确保拦截所有打开或关闭文件的调用,无论哪个包装函数调用它们?谢谢!