0

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

问候

4

1 回答 1

2

这很正常。/proc 文件(其中大多数,有一些例外)是在您读取它们时由内核生成的。这意味着在读取文件之前不可能知道大小。把它想象成文件上的量子力学。除非您阅读信息,否则您不会获得状态,但不能保证再次阅读会两次给您相同的信息;-)

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

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

于 2012-11-11T17:27:33.097 回答