我正在尝试在proc / [pid]中获取cmdline文件的文件大小。例如porc / 1 / cmdline。该文件不为空,它包含“/ sbin / init”。但我得到file_size = 0。
int main(int argc, char **argv) {
int file_size;
FILE *file_cmd;
file_cmd = fopen("/proc/1/cmdline", "r");
if(file_cmd == NULL) {
perror("proc/1/cmdline");
exit(1);
}else {
if(fseek(file_cmd, 0L, SEEK_END)!=0) {
perror("proc/1/cmdline");
exit(1);
}
file_size = ftell(file_cmd);
}
printf("fs: %d\n",file_size);
fclose(file_cmd);
}
此致
答案 0 :(得分:2)
这是正常的。 / proc文件(大多数,有一些例外)是由内核在您从中读取时生成的。这意味着在从文件中读取之前无法知道大小。可以把它想象成文件上的量子力学。除非您阅读了相关信息,否则您将无法获得州,但无法保证再次阅读会两次提供相同的信息; - )
换句话说,只有在您尝试阅读时才会生成EOF。它之前不存在,因此无法确定文件大小。
这实际上只是与伪装成文件I / O的内核进行通信。