首页 > 解决方案 > 在 Linux 上使用 fread 返回 0

问题描述

我已经编写了下面的代码,但是我从 fread 返回 0。perror 返回成功,所以我猜它工作正常。但我不明白为什么我没有读取写入文件的数据。

int main(int argc, char **argv)
{
    FILE *fp;
    char wr_buf[4096];
    char rd_buf[4096];
    int i;
    size_t num;

    printf("v1\n");

    fp = fopen("/run/media/nvme/test", "w+");

    if (fp == NULL)
        {
        printf("FAIL\n");
        return -1;
    }

    for (i=0; i<4096; i++)
    {
        wr_buf[i] = i;
        rd_buf[i] = 0;
    }

    num = fwrite(wr_buf , 1 , sizeof(wr_buf) , fp);
    printf("WR num %d\n", num);

    num = fread(rd_buf , 1 , sizeof(rd_buf) , fp);
    printf("RD num %d\n", num);
    perror("fread");

    for (i=0; i<4096; i++)
    {
        if (wr_buf[i] != rd_buf[i])
        {
            printf("ERR %x != %x\n", wr_buf[i], rd_buf[i]);
        }
    }   

    fclose(fp);

    printf("DONE\n");

        return 0;
}

标签: linuxfopenfread

解决方案


rewind(fp);在 fwrite 和 fread 之间调用,以返回文件的开头。要查找任意字节偏移,请使用 fseek 而不是 rewind。


推荐阅读