FatFs R0.15, released November 6, 2022
This commit is contained in:
@@ -63,7 +63,7 @@ FRESULT f_rewind (
|
||||
<li>Disk full. There is no free space on the volume to expand the file.</li>
|
||||
</ul>
|
||||
<p>The fast seek feature enables fast backward/long seek operations without FAT access by using an on-memory CLMT (cluster link map table). It is applied to <tt>f_read</tt> and <tt>f_write</tt> function as well, however, the file size cannot be expanded by <tt>f_write</tt>, <tt>f_lseek</tt> function while the file is at fast seek mode.</p>
|
||||
<p>The fast seek mode is enabled when <tt>FF_USE_FASTSEEK = 1</tt>. The CLMT must be created into the <tt>DWORD</tt> array prior to use the fast seek mode. To create the CLMT, set address of the <tt>DWORD</tt> array to the member <tt>cltbl</tt> in the open file object, set the size of array in unit of items to the <tt>cltbl[0]</tt> and then call <tt>f_lseek</tt> function with <tt class="arg">ofs</tt><tt> = CREATE_LINKMAP</tt>. After the function succeeded, no FAT access is occured in subsequent <tt>f_read</tt>, <tt>f_write</tt>, <tt>f_lseek</tt> function to the file. The number of items used or required is returned into the <tt>cltbl[0]</tt>. The number of items needed is (number of the file fragments + 1) * 2. For example, 12 items in the array will be used for the file fragmented in 5 portions. If the function failed with <tt>FR_NOT_ENOUGH_CORE</tt>, the size of given array is insufficient for the file.</p>
|
||||
<p>The fast seek mode is available when <tt>FF_USE_FASTSEEK = 1</tt>. The CLMT must be created into the <tt>DWORD</tt> array prior to use the fast seek mode. To create the CLMT, set address of the <tt>DWORD</tt> array to the member <tt>cltbl</tt> in the open file object, set the size of array in unit of items to the <tt>cltbl[0]</tt> and then call <tt>f_lseek</tt> function with <tt class="arg">ofs</tt><tt> = CREATE_LINKMAP</tt>. After the function succeeded, no FAT access is occured in subsequent <tt>f_read</tt>, <tt>f_write</tt>, <tt>f_lseek</tt> function to the file. The number of items used or required is returned into the <tt>cltbl[0]</tt>. The number of items needed is (number of the file fragments + 1) * 2. For example, 12 items in the array will be used for the file fragmented in 5 portions. If the function failed with <tt>FR_NOT_ENOUGH_CORE</tt>, the size of given array is insufficient for the file.</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -81,16 +81,16 @@ FRESULT f_rewind (
|
||||
res = f_open(fp, "file.dat", FA_READ|FA_WRITE);
|
||||
if (res) ...
|
||||
|
||||
<span class="c">/* Move to offset of 5000 from top of the file */</span>
|
||||
<span class="c">/* Set read/write pointer to 5000 */</span>
|
||||
res = <em>f_lseek</em>(fp, 5000);
|
||||
|
||||
<span class="c">/* Move to end of the file to append data */</span>
|
||||
<span class="c">/* Set read/write pointer to end of the file to append data */</span>
|
||||
res = <em>f_lseek</em>(fp, f_size(fp));
|
||||
|
||||
<span class="c">/* Forward 3000 bytes */</span>
|
||||
<span class="c">/* Advance read/write pointer 3000 bytes */</span>
|
||||
res = <em>f_lseek</em>(fp, f_tell(fp) + 3000);
|
||||
|
||||
<span class="c">/* Rewind 2000 bytes (take care on wraparound) */</span>
|
||||
<span class="c">/* Rewind read/write pointer 2000 bytes (take care on wraparound) */</span>
|
||||
res = <em>f_lseek</em>(fp, f_tell(fp) - 2000);
|
||||
</pre>
|
||||
<pre>
|
||||
|
||||
Reference in New Issue
Block a user