[Bug] DFS v1 多次对同一个文件打开文件描述符,使用最后的文件描述符读取不到数据
RT-Thread Version
5.2.0 posix
Hardware Type/Architectures
qemu-arm
Develop Toolchain
Other
Describe the bug
问题回溯德莫
int test_dfs()
{
FILE *fp = fopen("/test1.txt", "wb+");
FILE *fp1 = fopen("/test1.txt", "rb+");
if (fp)
{
fwrite("hello world", 1, 12, fp);
printf("close fp %p\n", fp);
fclose(fp);
}
if (fp1)
{
printf("close fp1 %p\n", fp1);
fclose(fp1);
}
FILE *fp3 = fopen("/test1.txt", "rb+");
if (fp3)
{
fseek(fp3, 0, SEEK_SET);
char data[1024];
memset(data, 0, 1024);
int n = fread(&data, 1, 1024, fp3);
printf("close fp3 %p, read:%d,%s\n", fp3, n, data);
fclose(fp3);
}
return 0;
}
MSH_CMD_EXPORT(test_dfs, "test dfs file system");`
Other additional context
No response
DFS是v1还是v2呢?Thank you.
DFS是v1还是v2呢?Thank you.
唔,标题反而没怎么看。是v1啊。对于v1来说,多次打开同一个文件,是可能存在一些问题的。
不太理解为啥要对同一个文件打开多次?
不太理解为啥要对同一个文件打开多次?
会有些极端情况。
然后DFS v2会修复更多这类需要考虑到更多的情况,但是DFS v2的资源占用应该会更大了。
用的是elmfat文件系统吗?如果是的话,fat文件系统设计本身应该不考虑文件系统缓存一致性的问题。
先两次open打开同一个文件会创建两个不同fd1和fd2,对应也会创建两个不同的 FIL ,里面存了文件大小和一个独立的缓存。
通过fd1写数据,会更新对应FIL里的文件大小,数据也会写到FIL独立的缓存里,而且可能不刷到disk里。通过fd2读,fd2对应的FIL 里的文件大小还是0,而且对应的独立缓存里啥也没有,这种就读不到数据。
可能只能在用户程序避免写上面这样的代码😂
好的,谢谢了,目前先用了dfsv2,规避这个问题
------------------ 原始邮件 ------------------ 发件人: "RT-Thread/rt-thread" @.>; 发送时间: 2025年7月3日(星期四) 晚上8:25 @.>; @.@.>; 主题: Re: [RT-Thread/rt-thread] [Bug] DFS v1 多次对同一个文件打开文件描述符,使用最后的文件描述符读取不到数据 (Issue #10393)
eatvector left a comment (RT-Thread/rt-thread#10393)
用的是elmfat文件系统吗?如果是的话,fat文件系统设计本身应该不考虑文件系统缓存一致性的问题。
先两次open打开同一个文件会创建两个不同fd1和fd2,对应也会创建两个不同的 FIL ,里面存了文件大小和一个独立的缓存。
通过fd1写数据,会更新对应FIL里的文件大小,数据也会写到FIL独立的缓存里,而且可能不刷到disk里。通过fd2读,fd2对应的FIL 里的文件大小还是0,而且对应的独立缓存里啥也没有,这种就读不到数据。
可能只能在用户程序避免写上面这样的代码😂
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>