以下内容源于朱有鹏《物联网大讲堂》课程的学习整理,如有侵权,请告知删除。

1、opendir与readdir函数

(1)opendir打开一个目录后,得到一个DIR类型的指针给readdir使用;

(2)readdir函数调用一次就会返回一个struct dirent类型的指针

  • 这个指针指向一个结构体变量,这个结构体变量里面记录了一个目录项(目录项,即目录中的一个文件)。

(3)readdir调用一次只能读出一个目录项,要想读出目录中所有的目录项必须多次调用readdir函数。

  • readdir函数内部户记住哪个目录项已经被读过,哪个还没读,所以多次调用后不会重复返回已经返回过的目录项。
  • 当readdir函数返回NULL时就表示目录中所有的目录项已经读完了。

2、dirent结构体

3、读取目录实战演练

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>int main(int argc, char **argv)
{DIR *pDir = NULL;struct dirent * pEnt = NULL;unsigned int cnt = 0;if (argc != 2){printf("usage: %s dirname\n", argv[0]);return -1;}pDir = opendir(argv[1]);if (NULL == pDir){perror("opendir");return -1;}while (1){pEnt = readdir(pDir);if(pEnt != NULL){// 还有子文件,在此处理子文件printf("name:[%s]    ,", pEnt->d_name);cnt++;if (pEnt->d_type == DT_REG){printf("是普通文件\n");}else{printf("不是普通文件\n");}}else{break;}};printf("总文件数为:%d\n", cnt);return 0;
}

4、可重入函数介绍

(1)可重入函数的概念;

(2)readdir函数的特点

  • readdir函数直接返回了一个结构体变量指针,因为readdir内部申请了内存并且给我们返回了地址。
  • 多次调用readdir时,readir内部并不会重复申请内存,而是使用第一次调用readdir时分配的那个内存。
  • 这个设计方法是readdir不可重入的关键。

(3)readdir在多次调用之间是有关联的,这个关联也说明readdir函数是不可重入的。

(4)库函数中有一些函数,刚开始提供时,都是不可重入的;后来意识到这种方式不安全,所以重新封装C库,提供了对应的可重复版本

  • 一般是不可重入版本函数名_r

Linux文件属性4——读取目录文件相关推荐

  1. linux下循环读取目录文件,linux循环递归读取目录指定类型文件及计算阶乘脚本...

    linux循环读取目录指定类型文件脚本 ergodic.sh #!/bin/bash function ergodic { for file in ` ls $1` do if [ -d $1&quo ...

  2. linux下循环读取目录文件,Linux 文件目录树的遍历

    1. linux提供opendir.readdir(readdir_r).closedir和scandir等接口实现对目录的读取. 2. readdir返回指向下一个目录项的指针,如果要自己传入缓冲区 ...

  3. linux添加目录命令权限,linux chmod命令设置目录/文件权限详解

    首页 > Linux教程 > 常用命令 > chmod 文件权限 linux chmod命令设置目录/文件权限详解 linux中chmod命令用于改变系统文件或目录的访问权限,用数字 ...

  4. 使用ls命令查看Linux的目录结构,linux ls命令查看目录文件详解

    首页 > Linux教程 > 常用命令 > ls 查看目录文件 linux ls命令查看目录文件详解 linux中ls命令用来查看目录中的所有文件和子目录,可选的参数比较多,本文筛选 ...

  5. linux编写脚本读取txt文件,用bash脚本或者批处理 bat脚本 读取一个目录下.txt文件第一行内容存放到新文件a.txt...

    起因:我把cmd 控制台说成了dos! 发展:人类生气了,跟我扯了一堆 dos 还有什么玩意儿,在我第二次还说那个是dos界面以后:( 后续:人类要我写 批处理bat 还有linux bash 脚本去 ...

  6. Linux学习:读取目录内容 (目录名和类型)和递归统计指定目录下普通文件个数练习

    一.读取目录内容 #include <stdio.h> #include <unistd.h> #include <dirent.h> #include <s ...

  7. 【Linux学习记录】Linux文件属性权限、目录管理

    1.linux 文件属性 r:4 w:2 x:1 rwz表示可读可写可执行 [root@vbird ~]# ls -al #列出所有的文件包括隐藏文件 下面显示的内容中第一个字符表示该文件为什么属性 ...

  8. [linux]解决vsftpd 读取目录列表失败的问题

    使用第三方FTP软件filezilla进行登陆,出现如下错误: 状态:    正在连接 192.168.1.6:21... 状态:    连接建立,等待欢迎消息... 响应:    220 (vsFT ...

  9. linux ls mv,04_Linux目录文件操作命令1(mv ls cd...)_我的Linux之路

    上一节已经给大家讲了Linux的目录结构,相信大家已经对Linux的整个目录结构有所了解 现实中,服务器(包含Linux,Unix,windows server)一般都摆放在机房里,因为一个机房摆放了 ...

最新文章

  1. python 搭建的http 动态服务器_Python 创建HTTP服务器的简单示例
  2. 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 )
  3. Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset
  4. smartform连续打印,并自动补充空行
  5. centos 6.5 安装 lamp 后mysql不能启动_Lamp的搭建--centos6.5下安装mysql
  6. Oracle 11g DG主库节点2 ORA-00245: control file backup fail
  7. IMA文件如何打开,winimage使用方
  8. Python机器学习:多项式回归与模型泛化009LASSO回归
  9. 剑指offer面试题65. 不用加减乘除做加法(位运算)
  10. [Python+Anaconda] 查看Python、Anaconda下python、CUDA、函数库的版本
  11. Android 中文字体的设置方法和使用技巧
  12. 数据结构基础(3)---C语言实现单链表
  13. SPSS因子分析经典案例分享
  14. 零基础 Java 学习笔记
  15. python爬取新浪博客_Python爬取韩寒全部新浪博客
  16. java工具类书写规范
  17. 关于Html class id 命名规范
  18. 单点登录常见解决方式和阿里云短信服务
  19. 解决使用阿里巴巴iconfont页面显示小方块问题
  20. postgreSql数据库学习使用

热门文章

  1. LDAP-轻量级目录访问协议(统一认证)
  2. node08-express
  3. 生成的数据库脚本没有注释?
  4. Visual Studio.net 2010 Windows Service 开发,安装与调试
  5. C++获取本机所有ip地址,可区分类型是有线无线虚拟机还是回环
  6. V8 中更快的异步函数和 promises
  7. shell基础(上)
  8. ArcGIS AO开发高亮显示某些要素
  9. C#与C/C++的交互zz
  10. 编程之美-第3章 结构之法