Linux read的文件内容被其他程序修改,但是但是读到的内容还是和之前一样

听涛-于斯 2014-07-21 11:11:18
本人用一个LPC1768(Cortex M3)实现一个类似U盘的功能,通过LPC1768一个RAM区域虚拟一个文件系统,使PC端能看到盘符和自己虚拟出的文件,文件系统为FAT12,这些功能在PC端枚举成U盘已经成功,现在想通过PC操作文件可以向下发送批量数据,由于LPC1768RAM只有64K,不能缓存数据,所以发下来的数据必须马上写入Spi Flash,为了同步,通过虚拟的另一个文件设置一个标志位,PC读取该文件的该位,判断是否继续写入数据,避免数据覆盖。现在的问题是read带标志位的文件的数据似乎是一个缓存区的数据,只读取U盘一次,然后数据就会一直是这个数据,从而不能握手。各位高手有什么好的方法解决该问题吗?谢谢
...全文
451 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
colddown 2014-07-21
  • 打赏
  • 举报
回复
打开文件的时候open加上O_DIRECT管不管用
听涛-于斯 2014-07-21
  • 打赏
  • 举报
回复
我现在的内核是3.2.0的,open没有这个参数O_DIRECT,这个功能难道屏蔽啦?
9527 2014-07-21
  • 打赏
  • 举报
回复
引用 9 楼 show_timer 的回复:
whoho能说详细点嘛,有点模糊不理解
楼主的意思是用一个U盘来作为单片机和PC之间的数据交换区域,不过这个U盘是单片机用ram虚拟出来的设备。 楼主,O_DIRECT (Since Linux 2.4.10)这个不应该没有,除非你PC上内核很老,此外可以尝试每次写操作之后,sync下:

SYNC(2)                    Linux Programmer’s Manual                   SYNC(2)

NAME
       sync - commit buffer cache to disk

SYNOPSIS
       #include <unistd.h>

       void sync(void);
如果还不行,PC上每次写入文件之后,close下。 再不行就检查你PC上对U盘操作和单片机上相关驱动
听涛-于斯 2014-07-21
  • 打赏
  • 举报
回复
whoho能说详细点嘛,有点模糊不理解
听涛-于斯 2014-07-21
  • 打赏
  • 举报
回复
我的内核版本为3.2.0
whoho 2014-07-21
  • 打赏
  • 举报
回复
FAT文件系统不支持共享式读写吧?
听涛-于斯 2014-07-21
  • 打赏
  • 举报
回复
都包含了,不过有个O_DIRECTORY,这个是和目录相关的
colddown 2014-07-21
  • 打赏
  • 举报
回复
sys/types.h sys/stat.h fcntl.h都include了?
啊呀 2014-07-21
  • 打赏
  • 举报
回复
不清楚,帮顶一下
听涛-于斯 2014-07-21
  • 打赏
  • 举报
回复
示没有这个O_DIRECT,O_DIRECT这个未声明
听涛-于斯 2014-07-21
  • 打赏
  • 举报
回复
提示没有这个O_DIRECT这个未声明

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧