LD_PRELOAD を使用して、open/close の呼び出しをインターセプトしようとしています。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() syscall を傍受できませんでしたが、strace 出力からは 2 つの syscall がまったく同じに見えます。
fclose() のインターセプトを書くだけでよいことはわかっており、C++ の ofstream::close() でも機能しました。ただし、open()/fopen() のインターセプトは、C++ の ofstream::ofstream() ではまだ機能しません。どのラッパー関数が呼び出すかに関係なく、ファイルを開いたり閉じたりするすべての呼び出しをインターセプトするにはどうすればよいですか? ありがとう!