【发布时间】:2021-10-28 04:08:13
【问题描述】:
我已经编写了下面的代码,但是我从 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;
}
【问题讨论】:
-
fwrite推进文件位置,所以当你fread它指向文件末尾时。如果你想读回你刚刚写的数据,你必须fseek回到你数据的开头。 -
是的,我刚刚意识到它会在文件的末尾。谢谢
-
另外,
fwrite可能实际上不会写任何东西。您需要 fsync 或 fclose 文件以确保数据实际写入文件。 (不过,如果您在同一进程中查找和读取,则不需要刷新。) -
谢谢,我会这样做的