全部,
是否有任何解决方案可以在我的程序中获取已打开文件的数量
问题是:用lex和yacc解析文件列表
所以我的问题是如何从系统命令中获取已修改文件的数量以调试此问题。
寻求帮助
答案 0 :(得分:1)
如果您只使用 <{em> 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
或fopen
之前,它必须是fclose
d - 否则,将调用原始函数而不是替换。
当涉及到将返回当前打开文件描述符数量的系统函数时,遗憾的是我不知道这样的事情。但是什么阻止您在调试器下运行应用程序,在fopen
上设置断点,并且只是使用操作系统工具来检查该号码?在Linux上,进程中打开文件描述符的数量等于目录/proc/$PID/fd
中的条目数 - 通过这种方式,您甚至可以知道将哪个实际文件分配给哪个文件描述符。 / p>
答案 1 :(得分:0)
您可以使用整数,将其设置为0
并在每次使用fopen
时递增,并在每次使用fclose
时递减。
file *fp;
int files_opened = 0; //number of open files
if(!(fp = fopen("file.txt", "r"))) //open file
{
//could not open file
}
else files_opened++; //we opened a file so increment files_opened
printf("\n%d files are currently open.", files_opened); //display how many files currently open
if(!(fclose(fp) != EOF))) //close file
{
//could not close file
}
else files_opened--; //we closed a file so decrement files_opened
printf("\n%d files are currently open.", files_opened); //display how many files currently open