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 )。

Linux读取目录文件的更多相关文章

  1. 【Linux】目录文件权限的查看和修改【转】

    转载自:http://zhaoyuqiang.blog.51cto.com/6328846/1214718 ============================================== ...

  2. linux 读取部分文件内容

    一般我们在linux上读取文件,是用vi工具,如果是写shell 脚本时,一般式通过cat 再 使用管道来达到流的处理. 但如果文件太大,单纯的cat 可能会使用过多的内存,而且实现上还需要后续的加工 ...

  3. Linux】目录文件权限的查看和修改【转】

    转载自:http://zhaoyuqiang.blog.51cto.com/6328846/1214718 ============================================== ...

  4. linux 修改目录文件权限,目录文件所属用户,用户组

    1:查看命令:ll drwxr-xr-x  4 gamer ftp      4096 Mar  7 16:56 gstore drwxrwxrwx 10 root  ftp      4096 De ...

  5. linux 遍历目录+文件(优化版本)

    c++17 filesystem, regex 遍历目录 #include <stdio.h> #include <sys/types.h> #include <dire ...

  6. linux查看目录文件以及子目录文件大小的命令

    可以使用以下命令,不过如果文件比较多,因为是递归统计大小的的,所以结果出来的会比较慢,需要等待. du -h --max-depth=1 * 以下是命令的说明 du [-abcDhHklmsSx] [ ...

  7. Linux:目录&文件基本操作

    - 表示上一次所在目录,- 通常表示当前用户的"home"目录.使用 pwd 命令可以获取当前所在路径(绝对路径). 新建文件:touch test创建目录:mkdir -p fa ...

  8. linux读取yaml文件的某个属性值

    trigger=$(cat test.yaml | grep "trigger" | awk '{print $2}') 该条命令的意思是:读取test.yaml文件中的trigg ...

  9. linux之目录文件操作

随机推荐

  1. mysql 手动把字段设置为null

    在根据经纬度计算距离的时候,发现有的视频点距离我当前位置的距离计算出来的为0,有的距离计算出来是几千公里,仔细看下数据库,发现了问题所在 计算出来几千公里的视屏点的经纬度是空不是null,然后我们手动 ...

  2. P 1015 德才论

    转跳点:

  3. mysql日期

    查询当前时间 select now() 结果:2017-04-24 18:11:26 格式化当前日期 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') 结果:2017-04- ...

  4. 汇编,寄存器,内存,mov指令

    一.代码 和 汇编 和 二进制之间的关系 二.复习一下计算机组成原理的知识 1.寄存器 计算机中有三个存储 32位cpu提供的寄存器有三种类型8位 16位 32位 64位的只是32位的扩展 并且程序大 ...

  5. 二十七、CI框架之自己写分页类并加载(写分页还是有难度,搞了一整天)

    一.我们写好自己的分页代码,防止library目录中,带构造函数 二.在模型中,添加2个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...

  6. Android群英传知识点回顾——第四章:ListView常用优化技巧

    4.1 ListView常用优化技巧 4.1.1 使用ViewHolder模式提高效率 4.1.2 设置项目间分割线 4.1.3 隐藏ListView的滚动条 4.1.4 取消ListView的Ite ...

  7. mysql第四篇:数据操作之多表查询

    mysql第四篇:数据操作之多表查询 一.多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment ...

  8. [XSS防御]HttpOnly之四两拨千斤

    今天看了<白帽子讲web安全>一书,顺便记录一下,HttpOnly的设置 httponly的设置值为 TRUE 时,使得Javascript无法获取到该值,有效地防御了XSS打管理员的 c ...

  9. Golang---sort包

    Sort 包介绍 Go 语言标准库 sort 包中实现了几种基本的排序算法:插入排序.快速排序和堆排序,但是在使用 sort 包进行排序时无需具体考虑使用哪种排序方式,因为该方法会根据传入的排序的数据 ...

  10. cf1228 D Complete Tripartite(哈希)

    题意: 无向简单图,无自环,无重边,n个点,m条边,请你将这n个点分为3个互相没有交集的集合.并且满足以下条件: 1.同一个集合中的任意两点之间没有边. 2.每个点都要与除了它这个集合以外的所有点相连 ...