| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- *
- */
- /*
- * 程序清单:保存与设置读取目录位置
- *
- * 程序会创建一个操作文件的函数并导出到msh命令列表
- * 在函数中调用 telldir() 函数
- * off_t telldir(DIR *d); 获取目录流的读取位置
- * void seekdir(DIR *d, off_t offset); 设置下次读取目录的位置
- */
- #include <rtthread.h>
- #if RT_VER_NUM >= 0x40100
- #include <fcntl.h> /* 当需要使用文件操作时,需要包含这个头文件 */
- #else
- #include <dfs_posix.h>
- #endif /*RT_VER_NUM >= 0x40100*/
- /* 假设文件操作是在一个线程中完成 */
- static void telldir_sample(void)
- {
- DIR *dirp;
- int save3 = 0;
- int cur;
- int i = 0;
- struct dirent *dp;
- /* 打开根目录 */
- rt_kprintf("the directory is:\n");
- dirp = opendir("/");
- for (dp = readdir(dirp); dp != RT_NULL; dp = readdir(dirp))
- {
- /* 保存第三个目录项的目录指针*/
- i++;
- if (i == 3)
- save3 = telldir(dirp);
- rt_kprintf("%s\n", dp->d_name);
- }
- /* 回到刚才保存的第三个目录项的目录指针*/
- seekdir(dirp, save3);
- /* 检查当前目录指针是否等于保存过的第三个目录项的指针. */
- cur = telldir(dirp);
- if (cur != save3)
- {
- rt_kprintf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
- }
- /* 从第三个目录项开始打印*/
- rt_kprintf("the result of tell_seek_dir is:\n");
- for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
- {
- rt_kprintf("%s\n", dp->d_name);
- }
- /* 关闭目录*/
- closedir(dirp);
- }
- /* 导出到 msh 命令列表中 */
- MSH_CMD_EXPORT(telldir_sample, telldir sample);
|