目录操作接口
创建目录
创建目录可使用下面的函数接口:
- int mkdir(const char *path, mode_t mode);
mkdir()函数用来创建一个目录,参数path 为目录名,参数mode 在当前版本未启用,输入0x777 即可。
- 参数: path - 目录名; mode - 创建模式。
- 返回值: 创建成功返回0,创建失败返回-1。
可以参考 @@以下@@ 代码了解如何使用mkdir 函数:
- void file_thread(void* parameter)
- {
- int ret;
- /* 创建目录*/
- ret = mkdir("/web", 0x777);
- if(ret < 0)
- {
- /* 创建目录失败*/
- rt_kprintf("mkdir error!\n");
- }
- else
- {
- /* 创建目录成功*/
- rt_kprintf("mkdir ok!\n");
- }
- }
打开目录
打开目录可使用下面的函数接口:
- DIR* opendir(const char* name);
opendir()函数用来打开一个目录,参数name 为目录路径名。若读取目录成功,返回该目录结构,若读取目录失败,返回RT_NULL。
参数: name - 目录路径名。
返回值: 打开文件成功,返回指向目录的DIR 结构指针,否则返回RT_NULL。
可以参考 @@以下@@ 代码了解如何使用opendir()函数:
- #include <dfs_posix.h>
- void dir_operation(void* parameter)
- {
- int result;
- DIR *dirp;
- /* 打开/web 目录*/
- dirp = opendir("/web");
- if(dirp == RT_NULL)
- {
- rt_kprintf("open directory error!\n");
- }
- else
- {
- /* 在这儿进行读取目录相关操作*/
- /* ...... */
- /* 关闭目录 */
- closedir(dirp);
- }
- }
读取目录
读取目录可使用下面的函数接口:
- struct dirent* readdir(DIR *d);
readdir()函数用来读取目录,参数d 为目录路径名。返回值为读到的目录项结构,如果返回值为RT_NULL,则表示已经读到目录尾;此外,每读取一次目录,目录流的指针位置将自动往后递推1 个位置。
- 参数:
d - 目录路径名。
- 返回值:
读取成功返回指向目录entry 的结构指针,否则返回RT_NULL。
可以参考 @@以下@@ 代码了解如何使用readdir 函数:
- void dir_operation(void* parameter)
- {
- int result;
- DIR *dirp;
- struct dirent *d;
- /* 打开/web 目录*/
- dirp = opendir("/web");
- if(dirp == RT_NULL)
- {
- rt_kprintf("open directory error!\n");
- }
- else
- {
- /* 读取目录*/
- while ((d = readdir(dirp)) != RT_NULL)
- {
- rt_kprintf("found %s\n", d->d_name);
- }
- /* 关闭目录 */
- closedir(dirp);
- }
- }
取得目录流的读取位置
获取目录流的读取位置可使用下面的函数接口:
- off_t telldir(DIR *d);
- 参数:
d - 目录路径名。 + 返回值:
无
设置下次读取目录的位置
设置下次读取目录的位置可使用下面的函数接口:
- void seekdir(DIR *d, off_t offset);
- 参数:
d - 目录路径名; offset - 偏移值,距离本次目录的位移。 + 返回值:
无 可以参考 @@以下@@代码了解如何使用seekdir 函数:
- void dir_operation(void* parameter)
- {
- DIR * dirp;
- int save3 = 0;
- int cur;
- int i = 0;
- struct dirent *dp;
- /* 打开根目录 */
- dirp = opendir ("/");
- for (dp = readdir (dirp); dp != RT_NULL; dp = readdir (dirp))
- {
- /* 保存第三个目录项的目录指针*/
- 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);
- }
- /* 从第三个目录项开始打印*/
- for (dp = readdir(dirp); dp != NULL; dp = readdir (dirp))
- rt_kprintf ("%s\n", dp->d_name);
- /* 关闭目录*/
- closedir (dirp);
- }
重设读取目录的位置为开头位置
重设读取目录为开头位置可使用下面的函数接口:
- void rewinddir(DIR *d);
- 参数:
d - 目录路径名; + 返回值:
无
关闭目录
关闭目录可使用下面的函数接口:
- int closedir(DIR* d);
closedir()函数用来关闭一个目录。该函数必须和opendir()函数成对出现。
- 参数:
d - 目录路径名; + 返回值:
关闭成功返回0,否则返回-1;
删除目录
删除目录可使用下面的函数接口:
- int rmdir(const char *pathname);
- 参数:
d - 目录路径名;
- 返回值:
删除目录成功返回0,否则返回-1。
格式化文件系统
- int mkfs(const char * fs_name, const char * device)
- 参数:
fs_name - 文件系统名; device - 设备名;
- 返回值:
格式化成功返回0,否则返回-1。
RT-Thread中目前支持的文件系统参见本章最后一节。