| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | /* * Copyright (c) 2006-2020, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date           Author       Notes * 2010-02-10     Bernard      first version * 2020-04-12     Jianjia Ma   add msh cmd */#include <rtthread.h>#include <dfs_posix.h>void list_dir(const char* path){    char * fullpath;	DIR *dir;	dir = opendir(path);	if (dir != RT_NULL)	{		struct dirent* dirent;		struct stat s;	    fullpath = rt_malloc(256);	    if (fullpath == RT_NULL)	    {	        rt_kprintf("no memory\n");	        return;	    }		do		{			dirent = readdir(dir);			if (dirent == RT_NULL) break;			rt_memset(&s, 0, sizeof(struct stat));			/* build full path for each file */			rt_sprintf(fullpath, "%s/%s", path, dirent->d_name);			stat(fullpath, &s);			if ( s.st_mode & S_IFDIR )			{				rt_kprintf("%s\t\t<DIR>\n", dirent->d_name);			}			else			{				rt_kprintf("%s\t\t%lu\n", dirent->d_name, s.st_size);			}		} while (dirent != RT_NULL);		closedir(dir);	}	else	{	    rt_kprintf("open %s directory failed\n", path);	}	rt_free(fullpath);}#ifdef RT_USING_FINSH#include <finsh.h>FINSH_FUNCTION_EXPORT(list_dir, list directory);#ifdef FINSH_USING_MSHstatic void cmd_list_dir(int argc, char *argv[]){    char* filename;    if(argc == 2)    {        filename = argv[1];    }    else    {        rt_kprintf("Usage: list_dir [file_path]\n");        return;    }    list_dir(filename);}FINSH_FUNCTION_EXPORT_ALIAS(cmd_list_dir, __cmd_list_dir, list directory);#endif /* FINSH_USING_MSH */#endif /* RT_USING_FINSH */
 |