-
Notifications
You must be signed in to change notification settings - Fork 5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用 ARMLIBC fflush API 可能无法真正写入数据的问题 #4928
Labels
discussion
This PR/issue needs to be discussed later
Comments
write只管write的,当有文件系统存在时,则调用底层的write实现去写入 ;并是说这里需要调用fsync的,如果是bsd socket是怎么办? |
这个和socket没有关系,这个是给fread fwrite函数用的,不是unix-like函数。 |
mysterywolf
added a commit
to mysterywolf/rt-thread
that referenced
this issue
Aug 15, 2022
…e,但是目前已经被废弃。因此唯一的解决方案就是每写完一句,就调用fsync去同步一次。 该问题在mbedos社区也进行过讨论,他们也面临和我们相同的两个问题: 1. Keil-MDK无有效的fflush解决方案,mbedos依然在使用淘汰的_sys_ensure桩函数。 2. Keil-MDK没有fileno函数,我方少部分软件包因此而无法使用Keil平台编译。 参考:ARMmbed/mbed-os#1601 issue: RT-Thread#4928 经过进一步测试发现,Keil-MDK中的fflush函数已经退化成服务于STDOUT的函数,Keil-MDK内部有一个buffer可以存放fputc(stdout) 发过来的数据,如果调用fflush,这些数据是可以flush出去的。但是如果是真正的文件数据,fflush函数并没有提供任何桩函数接口可以让文件flush数据出去。
Guozhanxin
pushed a commit
that referenced
this issue
Aug 16, 2022
…e,但是目前已经被废弃。因此唯一的解决方案就是每写完一句,就调用fsync去同步一次。 该问题在mbedos社区也进行过讨论,他们也面临和我们相同的两个问题: 1. Keil-MDK无有效的fflush解决方案,mbedos依然在使用淘汰的_sys_ensure桩函数。 2. Keil-MDK没有fileno函数,我方少部分软件包因此而无法使用Keil平台编译。 参考:ARMmbed/mbed-os#1601 issue: #4928 经过进一步测试发现,Keil-MDK中的fflush函数已经退化成服务于STDOUT的函数,Keil-MDK内部有一个buffer可以存放fputc(stdout) 发过来的数据,如果调用fflush,这些数据是可以flush出去的。但是如果是真正的文件数据,fflush函数并没有提供任何桩函数接口可以让文件flush数据出去。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
如上述代码,当执行 libc 里面的
fflush
API 时,底层会调用_sys_write
函数,可是该函数只调用了 posix 的write
函数,如果底层是 FatFS 时,此时数据并不会真正写入 flash 中。这个问题我的考虑是不是在
write
函数下面加个fsync
函数更好呢?The text was updated successfully, but these errors were encountered: