目录操作接口

创建目录

创建目录可使用下面的函数接口:

  1. int mkdir(const char *path, mode_t mode);

mkdir()函数用来创建一个目录,参数path 为目录名,参数mode 在当前版本未启用,输入0x777 即可。

  • 参数: path - 目录名; mode - 创建模式。
  • 返回值: 创建成功返回0,创建失败返回-1。
    可以参考 @@以下@@ 代码了解如何使用mkdir 函数:
  1. void file_thread(void* parameter)
  2. {
  3. int ret;
  4.  
  5. /* 创建目录*/
  6. ret = mkdir("/web", 0x777);
  7. if(ret < 0)
  8. {
  9. /* 创建目录失败*/
  10. rt_kprintf("mkdir error!\n");
  11. }
  12. else
  13. {
  14. /* 创建目录成功*/
  15. rt_kprintf("mkdir ok!\n");
  16. }
  17. }

打开目录

打开目录可使用下面的函数接口:

  1. DIR* opendir(const char* name);

opendir()函数用来打开一个目录,参数name 为目录路径名。若读取目录成功,返回该目录结构,若读取目录失败,返回RT_NULL。

  • 参数: name - 目录路径名。

  • 返回值: 打开文件成功,返回指向目录的DIR 结构指针,否则返回RT_NULL。

可以参考 @@以下@@ 代码了解如何使用opendir()函数:

  1. #include <dfs_posix.h>
  2.  
  3. void dir_operation(void* parameter)
  4. {
  5. int result;
  6. DIR *dirp;
  7.  
  8. /* 打开/web 目录*/
  9. dirp = opendir("/web");
  10. if(dirp == RT_NULL)
  11. {
  12. rt_kprintf("open directory error!\n");
  13. }
  14. else
  15. {
  16. /* 在这儿进行读取目录相关操作*/
  17. /* ...... */
  18.  
  19. /* 关闭目录 */
  20. closedir(dirp);
  21. }
  22. }

读取目录

读取目录可使用下面的函数接口:

  1. struct dirent* readdir(DIR *d);

readdir()函数用来读取目录,参数d 为目录路径名。返回值为读到的目录项结构,如果返回值为RT_NULL,则表示已经读到目录尾;此外,每读取一次目录,目录流的指针位置将自动往后递推1 个位置。

  • 参数:

d - 目录路径名。

  • 返回值:

读取成功返回指向目录entry 的结构指针,否则返回RT_NULL。

可以参考 @@以下@@ 代码了解如何使用readdir 函数:

  1. void dir_operation(void* parameter)
  2. {
  3. int result;
  4. DIR *dirp;
  5. struct dirent *d;
  6.  
  7. /* 打开/web 目录*/
  8. dirp = opendir("/web");
  9. if(dirp == RT_NULL)
  10. {
  11. rt_kprintf("open directory error!\n");
  12. }
  13. else
  14. {
  15. /* 读取目录*/
  16. while ((d = readdir(dirp)) != RT_NULL)
  17. {
  18. rt_kprintf("found %s\n", d->d_name);
  19. }
  20.  
  21. /* 关闭目录 */
  22. closedir(dirp);
  23. }
  24. }

取得目录流的读取位置

获取目录流的读取位置可使用下面的函数接口:

  1. off_t telldir(DIR *d);
  • 参数:

d - 目录路径名。 + 返回值:

设置下次读取目录的位置

设置下次读取目录的位置可使用下面的函数接口:

  1. void seekdir(DIR *d, off_t offset);
  • 参数:

d - 目录路径名; offset - 偏移值,距离本次目录的位移。 + 返回值:

无 可以参考 @@以下@@代码了解如何使用seekdir 函数:

  1. void dir_operation(void* parameter)
  2. {
  3. DIR * dirp;
  4. int save3 = 0;
  5. int cur;
  6. int i = 0;
  7. struct dirent *dp;
  8.  
  9. /* 打开根目录 */
  10. dirp = opendir ("/");
  11. for (dp = readdir (dirp); dp != RT_NULL; dp = readdir (dirp))
  12. {
  13. /* 保存第三个目录项的目录指针*/
  14. if (i++ == 3)
  15. save3 = telldir (dirp);
  16.  
  17. rt_kprintf ("%s\n", dp->d_name);
  18. }
  19.  
  20. /* 回到刚才保存的第三个目录项的目录指针*/
  21. seekdir (dirp, save3);
  22.  
  23. /* 检查当前目录指针是否等于保存过的第三个目录项的指针. */
  24. cur = telldir (dirp);
  25. if (cur != save3)
  26. {
  27. rt_kprintf ("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
  28. }
  29.  
  30. /* 从第三个目录项开始打印*/
  31. for (dp = readdir(dirp); dp != NULL; dp = readdir (dirp))
  32. rt_kprintf ("%s\n", dp->d_name);
  33.  
  34. /* 关闭目录*/
  35. closedir (dirp);
  36. }

重设读取目录的位置为开头位置

重设读取目录为开头位置可使用下面的函数接口:

  1. void rewinddir(DIR *d);
  • 参数:

d - 目录路径名; + 返回值:

关闭目录

关闭目录可使用下面的函数接口:

  1. int closedir(DIR* d);

closedir()函数用来关闭一个目录。该函数必须和opendir()函数成对出现。

  • 参数:

d - 目录路径名; + 返回值:

关闭成功返回0,否则返回-1;

删除目录

删除目录可使用下面的函数接口:

  1. int rmdir(const char *pathname);
  • 参数:

d - 目录路径名;

  • 返回值:

删除目录成功返回0,否则返回-1。

格式化文件系统

  1. int mkfs(const char * fs_name, const char * device)
  • 参数:

fs_name - 文件系统名; device - 设备名;

  • 返回值:

格式化成功返回0,否则返回-1。

RT-Thread中目前支持的文件系统参见本章最后一节。