andのみ を使用する場合、探しているもの (私が思うに) は、次のようなトリックで達成される可能性があります。fopen
fclose
#include <stdio.h>
unsigned int open_files = 0;
FILE *fopen_counting(const char *path, const char *mode)
{
FILE *v;
if((v = fopen(path,mode)) != NULL) ++open_files;
return v;
}
int fclose_counting(FILE *fp)
{
int v;
if((v = fclose(fp)) != EOF) --open_files;
return v;
}
#define fopen(x,y) fopen_counting(x,y)
#define fclose(x) fclose_counting(x)
もちろん、このようなスニペットは、あなたが制御できるコードにのみ影響します: への呼び出しや#include
実行の前に d を実行する必要があります。そうしないと、置換の代わりに元の関数が呼び出されます。fopen
fclose
開いているファイル記述子の現在の数を返すシステム関数に関しては、残念ながらそのようなことは知りません。しかし、アプリケーションをデバッガーで実行し、ブレークポイントを設定しfopen
、単に OS ツールを使用してその数値を確認することを妨げているのは何ですか? Linux では、プロセスで開いているファイル記述子の数は、ディレクトリ内のエントリの数と同じ/proc/$PID/fd
です。このようにすることで、実際のファイルがどのファイル記述子に割り当てられているかがわかります。