的/ proc / [PID] / CMDLINE文件大小(/proc/[pid]/cmdline

2019-07-03 17:59发布

我想要获得PROC / [PID]的CMDLINE文件的文件大小。 例如PORC / 1 / CMDLINE。 该文件不是空的,它包含“/ sbin目录/初始化”。 但我得到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);
    }

问候

Answer 1:

这是正常的。 / proc中的文件(其中大部分,也有少数例外)通过在你从他们阅读的那一刻内核产生的。 这意味着它不可能从文件中读取前需要了解的大小。 把它看成是对文件的量子力学。 除非你读的信息,但不保证再次阅读会给你两次相同的信息,你不会得到一个状态;-)

换句话说,当您尝试读取它只是产生EOF。 这是以前没有这一点,所以没有办法可以判断一个文件的大小。

这是真的只是伪装成文件I / O的内核通信。



文章来源: /proc/[pid]/cmdline file size
标签: size fopen proc