2010-06-23 95 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