ALL的數量,C打開文件:打開文件
有任何解決方案,使打開的文件數在我的方案C
的probleme是:同時使用lex文件列表的解析和yacc
yyin收到當前流的fopen,最後(yywrap)我使用fclose關閉yyin:所以通常打開的文件的數量等於零。 對於一些例子,我得到這個錯誤異常,當我打電話一個打開(許多選定的文件)
所以我的問題是我如何從系統命令獲得選定文件的數目,以調試此問題。
thnks求助
ALL的數量,C打開文件:打開文件
有任何解決方案,使打開的文件數在我的方案C
的probleme是:同時使用lex文件列表的解析和yacc
yyin收到當前流的fopen,最後(yywrap)我使用fclose關閉yyin:所以通常打開的文件的數量等於零。 對於一些例子,我得到這個錯誤異常,當我打電話一個打開(許多選定的文件)
所以我的問題是我如何從系統命令獲得選定文件的數目,以調試此問題。
thnks求助
如果使用只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)
當然,一個片段像這樣只會影響您控制的代碼:在對fopen
或fclose
進行任何調用之前,必須爲#include
d - 否則將調用原始函數而不是您的替換。
當涉及到一個系統函數,將返回當前打開的文件描述符的數量,我很遺憾不知道這樣的事情。但是什麼阻止了你在調試器下運行你的應用程序,在fopen
上設置斷點,並簡單地使用OS工具來檢查這個數字?在Linux上,進程中打開文件描述符的數量等於目錄/proc/$PID/fd
中的條目數 - 通過這樣做,您甚至可以知道哪個實際文件分配給哪個文件描述符。
你可以使用一個整數,將其設置爲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
這可能會有助於發佈一些代碼。 –
我解決了我的問題:有一個稱爲openfiles的系統函數,它描述了您的進程打開的文件的偵聽。 重複包括一個未完成的fopen導致此問題thk所有 – Aymanadou