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. spring源码 AutowireCapableBeanFactory接口

    对于想要拥有自动装配能力,并且想把这种能力暴露给外部引用的BeanFactory类需要实现此接口.正常情况下,不要使用此接口应该更倾向于使用BeanFactory或者ListableBeanFacto ...

  2. Ajax请求传递数组参数的方法

    方法一:拼接字符串参数 var arr={params:['param','param2']}; $.ajax({url:请求地址, data:arr, type:"POST", ...

  3. Ctrl + c 强制退出

    linux 使用cat 命令进入一个很大的文件,一直在不停地显示内容,让它停止的方法,可以用Ctrl + c 强制退出  

  4. 12 —— node 获取文件属性 —— 利用 自调用 闭包函数 解决 i 丢失的问题

    闭包的作用 : 保存变量 一,i 丢失的案例 var arr = ['node','vue','mysql'] for(var i=0;i<arr.length;i++){ setTimeout ...

  5. 吴裕雄--天生自然 PHP开发学习:常量

    <?php // 区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com"); echo GREETING; // 输 ...

  6. [转]Linux命令行上传文件到 百度网盘 bypy

    安装软件工具: apt-get install python-pip pip install requests pip install bypy 授权登陆: 执行 bypy info,显示下边信息,根 ...

  7. HDU 5428:The Factor

    The Factor  Accepts: 101  Submissions: 811  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65 ...

  8. POJ 1651:Multiplication Puzzle 矩阵相乘式DP

    Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7118   Accepted:  ...

  9. gabor滤波器

    https://blog.csdn.net/u013709270/article/details/49642397 https://github.com/xuewenyuan/Gabor_Visual ...

  10. SEO教程:快速增加360搜索引擎收录,360自动推送批量推送版

    上次改编了一下百度的JS推送代码,实现了批量推送 传送门>>>百度链接提交-js代码推送批量推送版 这次我们来研究360js自动推送代码. <script> (funct ...