2014-09-27 86 views
1

我想读取proc文件/ proc //状态的最后n个字节。如何从C中的proc文件中读取最后n个字节

在常规文件,我可以像文件的末尾FSEEK:

fseek(proc_file, -BUF_SIZE, SEEK_END); 

但由于proc文件大小为零,这是行不通的。

关于如何从结尾读取的任何建议?

我肯定要避免循环到最后。

回答

1

状态文件很小。刚开始的10000字节:

int fileLen = fread(statusFile, buffer, 10000); 

fread将返回文件中的字节数以及文件的内容。然后您可以检查文件的结尾。

只读最后几个字节没有优势。文件I/O系统被缓冲,即使只有几个字节也会导致底层读取几个k。

+0

我敢打赌,1024字节应该足够了。我做了$(ls -1/proc | egrep'^ [0-9] + $')的文件。做wc -c/proc/$ file/status 2>/dev/null;完成|在我的系统上排序为“n”,最小值为532,而最大值为850.可能在保守方面出错,并执行4096. – mpontillo 2014-09-27 02:56:10

+2

WRT缓冲:对于普通文件系统,这是正确的,但对于procfs,* not * true。它不支持块设备,所以没有缓存。读操作由内核直接完成。 – duskwuff 2014-09-27 04:32:13

+0

@Mike我已经看到它特别在群集上超过1k,但是我也最终使用4k。 – 2014-09-28 07:57:35

相关问题