打印
[boot]

Linux读取目录文件

[复制链接]
582|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蒋博1026|  楼主 | 2019-7-17 09:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、opendir与readdir函数
(1)、opendir打开一个目录后得到一个DIR类型的的指针给readdir使用。
(2)、readdir函数调用一次后就会返回一个struct dirent类型的指针,这个指针指向一个结构体变量,这个结构体变量里面记录了一个目录项(所谓目录项就是目录中的一个子文件)。
(3)、readdir调用一次只能读出一个目录项,要想读出目录中的所有目录项必须多次调用readdir函数。readdir函数内部会记住哪个目录项已经被读过了哪个还没读,所以多次调用后不会重复返回已经返回过的目录项。当readdir函数返回NULL时就代表目录中的所有目录项已经读完了。
2、可重入函数介绍
(1)、有些函数是可重入的有些是不可重入的。可重入函数可以理解为是能被中断的函数,并且它被中断返回后也不会出现什么错误。不可重入函数可以理解为如果函数被中断的话,就会出现不可预料的错误。这是因为函数中使用了一些系统资源,比如全局变量区,中断向量表之类的。比如多个进程同时对一个文件进行写操作,如果没有同步机制的话,对文件的写入就会变得难以控制。
(2)、readdir函数和我们之前接触的一些函数是不同的,首先readdir函数直接返回了一个结构体变量指针,因为readdir内部申请了内存并且给我们返回了地址。多次调用readdir时,其实readdir内部并不会重复申请内存而是使用第一次调用readdir时分配的那个内存。这种设计方法是readdir不可重入的关键。
(3)、readdir在多次调用时是有关联的,这个关联也表明readdir函数是不可重入的。
(4)、库函数中有一些函数当年刚开始提供的时候都是不可重入的,后来意识到这种方式不安全,所以重新封装了C库,提供了对应的可重复版本(一般是不可重入版本函数名+ _r )。

使用特权

评论回复

相关帖子

沙发
zhangmangui| | 2019-7-17 23:09 | 只看该作者
这已经属于驱动级了吧

使用特权

评论回复
板凳
蒋博1026|  楼主 | 2019-7-18 08:46 | 只看该作者
zhangmangui 发表于 2019-7-17 23:09
这已经属于驱动级了吧

是这样的,已经偏底层了,就是感觉如果一点不懂的话,会有很多盲点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

323

主题

1827

帖子

18

粉丝