/ proc / [pid] / cmdline文件大小

时间:2012-11-11 17:20:30

标签: size fopen proc

我正在尝试在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);
    }

此致

1 个答案:

答案 0 :(得分:2)

这是正常的。 / proc文件(大多数,有一些例外)是由内核在您从中读取时生成的。这意味着在从文件中读取之前无法知道大小。可以把它想象成文件上的量子力学。除非您阅读了相关信息,否则您将无法获得州,但无法保证再次阅读会两次提供相同的信息; - )

换句话说,只有在您尝试阅读时才会生成EOF。它之前不存在,因此无法确定文件大小。

这实际上只是与伪装成文件I / O的内核进行通信。