linux scandir函数,Linux的scandir函数
学习目的:
熟悉linux下scandir函数的使用
1、函数的功能
遍历指定目录下满足某种过滤模式的文件,返回结果可通过指定函数进行排序,并将返回的子目录信息(不递归遍历子目录的目录)存放到函数内部动态分配的内存中,我们可通过访问返回结果获取当前路径下目录的信息。
2、函数的原型
int scandir(const char *dirp, struct dirent ***namelist,int (*filter)(const struct dirent *),int (*compar)(const struct dirent **, const struct dirent **));
dirp: 指定扫描的目录
namelist: struct dirent结构体类型的三级指针,用于获取该函数内部为存放返回结果的分配的动态内存
scadir函数内部使用malloc动态分配内存,用以保存遍历到的目录相关信息,动态分配内存结构如图2-1所示。分配的内存包含两个部分,一部分是struct dirent类型指针(一段连续内存,可看成指针数组),用于指向malloc分配用来存放目录信息内存地址,另一部分是malloc分配struct dirent大小内存,存放遍历目录或文件的相关信息。若想获取目录相关信息,需要先获取指向该存放内存的指针,即图2-1中的strcut dirent *arr[N]指针数组地址。
图2-1 scandir函数内部存储目录动态内存描述
filter: 函数指针,指向过滤模式函数。当filter指针设置为NULL时,扫描dirp目录下的所有顶层文件
compar: 函数指针,指向对遍历结果进行排序函数,alphasort函数和versionsort是经常用到的函数,alphasort根据字母先后对返回结果进行排序
3、函数使用
scandir_test.c----->参考man page提供代码
#define _SVID_SOURCE
/*print files in current directory in reverse order*/#include
int main(void)
{struct dirent **namelist;intn;
n= scandir(".", &namelist, NULL, alphasort);if (n < 0)
perror("scandir");else{while (n--)
{
printf("%s\n", namelist[n]->d_name);
free(namelist[n]); //------------------------>①每访问完一条目录或文件信息,释放由malloc分配的用于存放该信息的动态内存
}
free(namelist); //------------------------>②访问完指定目录下所有目录或文件信息内容,释放malloc分配的用于索引的指针数组内存
}
}
注:使用scandir函数获取相关信息之后,务必像上述代码①、②所示调用free函数释放内部由malloc分配内存(内存结构描述如图2-1所示)
linux scandir函数,Linux的scandir函数相关推荐
- linux的scandir函数,linux C++ scandir 的使用
() 头文件 #include () 函数定义 int scandir(const char *dir,struct dirent **namelist,int (*filter)(const voi ...
- linux协议栈skb操作函数,linux协议栈skb操作函数
1,struct sk_buff数据结构 struct sk_buff{ //这两个结构必须放在最前面 struct sk_buff *next; struct sk_buff *prev; stru ...
- linux动态库注册函数,Linux动态库函数的详解
linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: rtld_lazy rtld_now rtld_ ...
- linux receive函数,Linux网络 - 数据包的接收过程
的方式写入到指定的内存地址,该地址由网卡驱动分配并初始化.注: 老的网卡可能不支持DMA,不过新的网卡一般都支持. 3: 网卡通过硬件中断(IRQ)通知CPU,告诉它有数据来了 4: CPU根据中断表 ...
- linux内核提供的内存操作函数
1.kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) 内 ...
- Linux中assert头文件,linux系统下如何使用assert函数
linux系统下如何使用assert函数 只要看得懂程序的人都知道assert,在Windows下使用VC编写,使用assert之后,只需在IDE中设置为debug版或者是release版,编译器就会 ...
- linux的阻塞waitqueue,Linux阻塞控制 wait_event与wait_event_interruptible函数详解
Linux阻塞控制 wait_event与wait_event_interruptible函数详解 最近研究了一下linux驱动对进程的阻塞与非阻塞的控制,感觉linux对进程的控制真的是牛逼,各种进 ...
- php函数scandir_使用PHP函数scandir排除特定目录
scandir()函数返回一个数组,其中包含指定路径中的文件和目录.如下所示: 例子: print_r(scandir('test_directory')); ?> 输出: Array ( [0 ...
- 【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )
文章目录 一.Linux 内核 动态分配内存 系统接口函数 二.统计输出 vmalloc 分配的内存 一.Linux 内核 动态分配内存 系统接口函数 Linux 内核 " 动态分配内存 & ...
- 【Linux 内核】调度器 ⑥ ( task_woken 函数 | set_cpus_allowed 函数 | rq_online 函数 | rq_offline 函数 )
文章目录 一.task_woken 函数 ( 唤醒阻塞进程 ) 二.set_cpus_allowed 函数 ( 修改进程在 CPU 中的亲和力 ) 三.rq_online 函数 ( 启动执行队列 ) ...
最新文章
- iOS 后台下载及管理库
- mongoDB条件操作符
- 1.17 局部内部类
- Java中集合(六)Queue
- SQL中cross join,left join,right join ,full join,inner join 的区别
- 企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持...
- 自己使用的一个.NET轻量开发结构
- jzoj1273-袁绍的刁难【进制转换】
- html约束验证的例子,HTML5利用约束验证API来检查表单的输入数据的代码实例
- 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的物资管理系统
- 360解压电脑版安装包_迅捷pdf转换器电脑版安装包下载-迅迅捷pdf转换器安装包免费下载...
- go语言和java比_python与java、php、go的优势对比,各语言不要引起恐慌哈
- 雷电3菊链功能_同轴科技推出5款USB-C全功能数据线,清一色内置同轴线缆
- 离线语音控制并不等于本地语音识别
- C语言之pthread_cond_wait()和pthread_cond_timedwait()区别(十五)
- 原创Maya mel系列插件推荐
- HTTPS 免费证书,免费 ssl 证书,FreeSSL.org 申请多种免费证书
- python人民币转大写_Python人民币大写转换代码
- CSS解决图片过大撑破DIV的方法
- python创建一个列表、用于存储同学姓名_python学习日记04,Python