二、写文件流程分析<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1、写文件程序结构。
res = f_open(&file, "331.txt", FA_CREATE_ALWAYS | FA_WRITE);
res = f_write(&file, data, 512, &br);
f_close(&file);
2、函数f_open(&file, "331.txt", FA_CREATE_ALWAYS | FA_WRITE)的执行
仍然是打开文件,但是以创建和写的方式打开,其执行与读方式的打开就稍有不同。以下是写部分的操作源代码:
先执行函数reserve_direntry(&dj, &dir); 这个函数的作用是通过dj目录对象在相应目录的簇里查找一个空闲目录项,并用dir指向它。并设置该文件目录项的属性等。
3、f_write(&file, data, 512, &br);函数的执行
这个函数执行文件写入操作,file是文件信息结构体:包括它对应的文件系统结构体指针、目录项扇区号、文件对用的起始簇号、当前簇号、当前扇区号、文件对象写指针。有了这些信息,就好操作文件。Data是写入数据的缓冲区,512是要写的数据个数,br是写入成功的个数(这个是返回值)。部分源代码如下:
cc = btw / 512U; /* When remaining bytes >= sector size, */
if (cc) { * Write maximum contiguous sectors directly */
if (fp->csect + cc > fp->fs->csize) /* Clip at cluster boundary */
cc = fp->fs->csize - fp->csect;
if (disk_write(0, wbuff, sect, (BYTE)cc) != RES_OK)
实际操作与读文件差不多,只是在写入数目操作本簇的时候,有这个操作,clust = create_chain(fp->curr_clust)文件系统会分配一个新的簇。
有些源代码就没有深入去读。具体的含义等文件系统移植成功时,在调试过程中去分析。
文章评论(0条评论)
登录后参与讨论