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ファイル(それらのほとんど、いくつかの例外があります)は、それらから読み取った時点でカーネルによって生成されます。つまり、ファイルから読み取る前にサイズを知ることは不可能です。それをファイルの量子力学と考えてください。情報を読まないと状態はわかりませんが、もう一度読んでも同じ情報が2回得られる保証はありません;-)

つまり、EOFは、読み込もうとしたときにのみ生成されます。その前には存在しないため、ファイルサイズを決定する方法はありません。

これは実際には、ファイルI/Oを装ったカーネルとの通信にすぎません。

于 2012-11-11T17:27:33.097 に答える