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; } } (我还没有编译这个代码,它本来是为了显示这个概念,它可能有一些小错误,但我认为这个概念会保留 – 只要你的代码,而不是某些第三方库泄漏) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |