5 【文件系统】目录查询

发布于 2020-07-03 10:19:08

您好 有个项目使用文件系统存储操作日志,总共可以记录500条。
目前的做法是,建立一个统计文件,将操作日志的总条数和最新操作条数 记录在一个文件内。
现在想删除统计文件,上电后,直接读取操作日志和操作时间,生成一个总条数和最新操作条数,存储在RAM。不知道文件系统是否有这样的函数。期望指导,谢谢。

查看更多

关注者
0
被浏览
169
2 个回答
小住住
小住住 认证专家 2020-07-04

根据上面思路简单写了个例子:

#include <rtthread.h>
#include <dfs_posix.h> /* 当需要使用文件操作时,需要包含这个头文件 */

// 函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中。

// 下面是struct stat 内各参数的说明:
// struct stat
// {
//     dev_t st_dev; //device 文件的设备编号
//     ino_t st_ino; //inode 文件的i-node
//     mode_t st_mode; //protection 文件的类型和存取的权限
//     nlink_t st_nlink; //number of hard links 连到该文件的硬连接数目, 刚建立的文件值为1.
//     uid_t st_uid; //user ID of owner 文件所有者的用户识别码
//     gid_t st_gid; //group ID of owner 文件所有者的组识别码
//     dev_t st_rdev; //device type 若此文件为装置设备文件, 则为其设备编号
//     off_t st_size; //total size, in bytes 文件大小, 以字节计算
//     unsigned long st_blksize; //blocksize for filesystem I/O 文件系统的I/O 缓冲区大小.
//     unsigned long st_blocks; //number of blocks allocated 占用文件区块的个数, 每一区块大小为512 个字节.
//     time_t st_atime; //time of lastaccess 文件最近一次被存取或被执行的时间, 一般只有在用mknod、utime、read、write 与tructate 时改变.
//     time_t st_mtime; //time of last modification 文件最后一次被修改的时间, 一般只有在用mknod、utime 和write 时才会改变
//     time_t st_ctime; //time of last change i-node 最近一次被更改的时间, 此参数会在文件所有者、组、权限被更改时更新
// };
typedef struct latest_modify_info
{
    time_t modify_time;
    char   *file_name;
}MODIFY_INFO;
static void readdir_sample(void)
{
    DIR *dirp;
    struct dirent *d;
    rt_uint32_t eventlog_count = 0;
    struct stat buf;
    struct stat buf_latest;
    //time_t modify_time;
    MODIFY_INFO  latest_info;
    latest_info.modify_time = 0;
    int ret;
    /* 打开/dir_test 目录*/
    dirp = opendir("/");
    if (dirp == RT_NULL)
    {
        rt_kprintf("open directory error!\n");
    }
    else
    {
        /* 读取目录*/
        while ((d = readdir(dirp)) != RT_NULL)
        {
            if (rt_strncmp(d->d_name,"eventlog",7) == 0)
            {
                eventlog_count ++;
                rt_kprintf("found %s\n", d->d_name);
                ret = stat(d->d_name,&buf);
                if (ret == 0)
                {
                    if(latest_info.modify_time < buf.st_mtime)
                    {
                        latest_info.modify_time = buf.st_mtime;
                        //strcpy(latest_info.file_name,d->d_name);
                        latest_info.file_name = d->d_name;
                    }
                }
                else
                    rt_kprintf("text.txt file not fonud\n");
            }
      
        }
        rt_kprintf("the eventlog_count is %d\n", eventlog_count);
        rt_kprintf("the lastes eventlog is %s\n", latest_info.file_name);
        /* 关闭目录 */
        closedir(dirp);
    }
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(readdir_sample, readdir sample);

微信截图_20200704195258.png

CrisJay
CrisJay 认证专家 2020-07-03

楼主是具体指的什么函数呢

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友