加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C程序中打开文件的数量

发布时间:2020-12-16 07:04:45 所属栏目:百科 来源:网络整理
导读:是否有一种简单的方法来获取c程序打开的文件数量. 我想从我的代码中做到这一点,理想情况是在C中. 我发现this blog article正在使用循环遍历所有可用的文件描述符并测试fstat的结果,但我想知道是否有更简单的方法来做到这一点. 编辑 似乎除了保持打开文件的数
是否有一种简单的方法来获取c程序打开的文件数量.

我想从我的代码中做到这一点,理想情况是在C中.

我发现this blog article正在使用循环遍历所有可用的文件描述符并测试fstat的结果,但我想知道是否有更简单的方法来做到这一点.

编辑

似乎除了保持打开文件的数量之外没有其他解决方案.感谢大家的帮助.

凯文

解决方法

由于文件是FILE *,我们可以这样做:

在包含在任何地方的头文件中:

#define fopen(x,y) debug_fopen(x,y,__FILE__,__LINE__)
#define fclose(x)   debug_fclose(x)

在“debugfile.cpp”中(显然不能使用上面的#define)

struct FileInfo
{
   FileInfo(const char *nm,const char fl,int ln) :  
      name(nm),file(fl),line(ln) {}

   std::string name;
   const char *file;
   int line;
};

std::map<FILE*,FileInfo> filemap;

FILE *debug_fopen(const char *fname,const char *mode,const char *file,int line)
{
   FILE *f = fopen(fname,mode);
   if (f)
   {
      FileInfo inf(fname,file,line);
      filemap[f] = inf;
   }
}

int debug_fclose(FILE *f)
{
   int res = fclose(f);
   filemap.erase(f);
   return res;
}

// Called at some points. 
void debug_list_openfiles()
{
   for( i : filemap )
   {
       cerr << "File" << (void *) i.first << " opened as " << i.second.name 
            << " at " <<  i.second.file << ":" << i.second.line << endl;
   }
}

(我还没有编译这个代码,它本来是为了显示这个概念,它可能有一些小错误,但我认为这个概念会保留 – 只要你的代码,而不是某些第三方库泄漏)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读