【发布时间】:2014-09-27 00:16:17
【问题描述】:
我想读取 proc 文件 /proc//status 的最后 n 个字节。
在常规文件上,我可以从文件末尾开始 fseek,例如:
fseek(proc_file, -BUF_SIZE, SEEK_END);
但由于 proc 文件的大小为零,所以这不起作用。
关于如何从最后阅读的任何建议?
我肯定希望避免循环到最后。
【问题讨论】:
我想读取 proc 文件 /proc//status 的最后 n 个字节。
在常规文件上,我可以从文件末尾开始 fseek,例如:
fseek(proc_file, -BUF_SIZE, SEEK_END);
但由于 proc 文件的大小为零,所以这不起作用。
关于如何从最后阅读的任何建议?
我肯定希望避免循环到最后。
【问题讨论】:
状态文件很小。只需 fread 前 10000 个字节:
int fileLen = fread( statusFile, buffer, 10000 );
fread 将返回文件中的字节数以及文件的内容。然后您可以检查文件的结尾。
只读取最后几个字节没有任何好处。文件 i/o 系统是缓冲的,因此即使请求几个字节也会导致较低层读取几个 k。
【讨论】:
for file in $(ls -1 /proc | egrep '^[0-9]+$'); do wc -c /proc/$file/status 2> /dev/null; done | sort -n,最小值是 532,而最大值是 850。也许保守的一面会犯错,做 4096。