2010-06-23 44 views
2

我試圖讀取使用標準的C函數在/ proc /模塊:如何讀取procfs文件?

FILE *pfile; 
int sz; 
pfile = fopen("/proc/modules", "r"); 
fseek(pfile, 0, SEEK_END); 
sz = ftell(pfile); 
rewind(ftell); 

但我的問題是FTELL給我0值。所以我無法讀取文件的內容,因爲我有一個零長度。有另一種方法可以獲得我想要閱讀的文件的大小嗎?

非常感謝。

回答

6

不,它沒有大小。但是,您可以讀取它的部分內容,直到達到文件結尾。

+0

沒錯。/proc中的「文件」將始終返回大小= 0,但如果您繼續閱讀,則無論如何,您將獲得數據。 – eemz 2010-06-23 16:14:48

+0

$ find/proc -type f -size +0 2>/dev/null /proc/config.gz ... – adobriyan 2010-06-23 20:30:14

+0

當我使用fgetc查找EOF時,該應用程序給出了Segmentation Fault。 – domlao 2010-06-23 23:56:39

3

/proc文件是在讀取它們時動態創建的,因此它們不能有大小。

我站好了。有些/ proc文件的確有一個大小,正如adobriyan在對Sjoerd的回答評論中指出的那樣。 (?是的Linux內核成名阿列克謝Dobriyan)

至於如何使用龜etc讀取文件,這個工程:

int c; 
while ((c = fgetc(pfile)) != EOF) { 
    printf("%c",c); 
} 

而且你的程序是因爲段錯誤你想FTELL後退。正確。

+0

是否有任何可能的方法可以精確讀取procfs的動態數據。我做了Sjoerd建議的使用fgetc,但它給了我一個分段錯誤。 – domlao 2010-06-23 23:57:47