工作中遇到/tmp/tmp_file
打开保存失败,记录原因以及解决方案
#1
开发过程中需要保存一些临时文件在内存中,一般路径为/tmp/xxx
,在Linux
下测试正常,而在Ecos
系统下执行open
出现异常
测试代码
const char * tmp_file = "/tmp/cache";
int dst = -1, wsize = 0;
char buf[128] = {0};
dst = open(tmp_file, "w+");
printf("dst:%d\n", dst);
wsize = write(dst, buf, sizeof(buf));
printf("wsize:%d\n", wsize);
出现错误
cramfs_open() error:cramfs is readonly filesystem
dst:-1
wsize:-1
检查ecos/fs
发现存在多个文件系统
- cramfs
- ramfs
- romfs
- minifs
- fat
- ntfs
应用中注册如下
MOD_FAT
MOD_NTFS
//MOD_JFFS2
MOD_CAMFS
MOD_MINIFS
MOD_ROMFS
MOD_RAMFS
已经支持ramfs
内存文件系统,继续检查mount point
,fstab
如下
/dev/flash/0/5 /home/gx minifs
NONE /mnt ramfs
可以看到内存文件系统ramfs
挂载点为/mnt
,修改之后解决问题
ramfs 与 tmpfs
ramfs
是下一种基于RAM
做存储的文件系统,不会用swap
,会因为数据的写入自动增长空间,所以可能导致最后系统所有的内存耗完
tmpfs
是Linux
下的一个文件系统,它将所有的文件都保存在虚拟内存中,umount tmpfs
后所有的数据也会丢失,tmpfs
就是ramfs
的衍生品。tmpfs
使用了虚拟内存的机制,它会进行swap
,但是它有一个相比ramfs
的好处:mount
时指定的size
参数是起作用的,这样就能保证系统的安全,而不是像ramfs
那样,一不留心因为写入数据太大吃光系统所有内存导致系统被hang
住。