fread():无法读取/ proc / $ pid / status的文件

时间:2018-10-09 01:02:19

标签: c linux-kernel segmentation-fault fread

我正在尝试在函数中读取文件/proc/$pid/status。我可以使用fopen打开文件,而当我使用fread()读取文件时,会得到Segmentation fault (core dumped)

功能:

void getContextSwitches() {
    FILE* fp;

    int pid = getpid();
    char spid[10];
    snprintf(spid, 10, "%d", pid);

    char buffer[3000];
    size_t bytesRead;

    printf("\nPid of the process is: %s", spid);

    char path[50];
    path[0] = '\0';
    strcat(path, "/proc/");
    strcat(path, spid);
    strcat(path, "/status");

    printf("\nPath: %s\n", path);

    fp = getFile(fp, path);

    if(NULL == fp) {
        printf("File status is not read\n");
        exit(1);
    }
    printf("File pointer not null");
    printf("size of buffer: %ld", sizeof(buffer));
    bytesRead = fread(buffer, 1, sizeof(buffer), fp);
    printf("\nIt's not coming here");
    fclose(fp);
}

这是我获得的输出:

Pid of the process is: 85244
Path: /proc/85244/status

File pointer not null
Size of buffer: 3000
Segmentation fault (core dumped)

buffer的大小已正确分配,并且fp也不能为空。我在代码的其他方面也有类似的功能,它们可以正常工作。我已经检查过fread()的签名,而且看起来也不错。

有人可以帮助我了解其背后的问题吗?

1 个答案:

答案 0 :(得分:1)

问题出在您的getFile()函数中。 其余代码都可以。

我怀疑您从FILE*返回了无效的getFile()