void test_flash_traffic(const char *mountpt) { char name0[100]; char name1[100]; int i; yaffs_Device *dev; yaffs_traceMask = 0; yaffs_StartUp(); yaffs_mount(mountpt); dev = yaffs_getdev(mountpt); strcpy(name0,mountpt); strcat(name0,"/x"); strcpy(name1,mountpt); strcat(name1,"/y"); dump_dev_stats(dev,"start"); create_file_of_size(name0,32 * 1024 * 1024); dump_dev_stats(dev,"32MB written"); for(i = 0; i < 20; i++) create_file_of_size(name1,1024 * 1024); dump_dev_stats(dev,"20x 1MB files written"); }
/********************************************************************************************************* ** 函数名称: __procFsYaffsRead ** 功能描述: procfs 读一个 yaffs 文件 ** 输 入 : p_pfsn 节点控制块 ** pcBuffer 缓冲区 ** stMaxBytes 缓冲区大小 ** oft 文件指针 ** 输 出 : 实际读取的数目 ** 全局变量: ** 调用模块: *********************************************************************************************************/ static ssize_t __procFsYaffsRead (PLW_PROCFS_NODE p_pfsn, PCHAR pcBuffer, size_t stMaxBytes, off_t oft) { REGISTER PCHAR pcFileBuffer; size_t stRealSize; /* 实际的文件内容大小 */ size_t stCopeBytes; /* * 程序运行到这里, 文件缓冲一定已经分配了预置的内存大小. */ pcFileBuffer = (PCHAR)API_ProcFsNodeBuffer(p_pfsn); if (pcFileBuffer == LW_NULL) { _ErrorHandle(ENOMEM); return (0); } stRealSize = API_ProcFsNodeGetRealFileSize(p_pfsn); if (stRealSize == 0) { /* 需要生成文件 */ /* * 在这里生成文件的内容 */ INT i = 0; PCHAR pcVolName; struct yaffs_dev *pyaffsDev; /* yaffs 挂载设备 */ do { pcVolName = yaffs_getdevname(i, &i); if (pcVolName == LW_NULL) { break; /* 没有其他的卷 */ } pyaffsDev = (struct yaffs_dev *)yaffs_getdev(pcVolName); if (pyaffsDev == LW_NULL) { break; /* 无法查询到设备节点 */ } /* * (__PROCFS_BUFFER_SIZE_YAFFS - stRealSize) 为文件缓冲区剩余的空间大小 */ stRealSize = __procFsYaffsPrint(pyaffsDev, pcVolName, pcFileBuffer, __PROCFS_BUFFER_SIZE_YAFFS, stRealSize); } while (i != PX_ERROR); API_ProcFsNodeSetRealFileSize(p_pfsn, stRealSize); /* 回写文件实际大小 */ } if (oft >= stRealSize) { _ErrorHandle(ENOSPC); return (0); } stCopeBytes = __MIN(stMaxBytes, (size_t)(stRealSize - oft)); /* 计算实际拷贝的字节数 */ lib_memcpy(pcBuffer, (CPVOID)(pcFileBuffer + oft), (UINT)stCopeBytes); return ((ssize_t)stCopeBytes); }