读取文件目录

一.opendir与readdir函数

    1.opendir是一个库函数,打开一个目录,并返回一个DIR指针给readdir函数

DIR *opendir(const char *name);

2.readdir是一个库函数,接收参数是DIR指针,返回一个struct dirent *结构体指针

struct dirent *readdir(DIR *dirp);

二.dirent结构体

struct dirent {

ino_t          d_ino;       /* inode number 文件的inode*/

off_t          d_off;       /* not an offset; see NOTES 文件所在的位置*/

unsigned short d_reclen;    /* length of this record 文件名的长度*/

unsigned char  d_type;      /* type of file; not supported

by all filesystem types 文件类型*/

char           d_name[256]; /* filename 文件名*/

};

三.可重入函数和不可重入函数

1.在readdir函数使用时,可以看出返回值struct dirent *这个结构体指针,这个结构体在使用函数之前并没有为它申请内存,可见是在readdir函数内部为其申请的内存,而readdir函数多次被调用执行时只有在第一次执行时才会为struct dirent结构体开辟空间,后面执行时都用的是第一次创建的struct dirent结构体,也就是说每次readdir函数执行时都是相互之间有关联的,因此readdir函数是不可重入的函数

2.所谓可重入函数是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。

3.不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的:

1) 函数体内使用了静态的数据结构;
    2) 函数体内调用了malloc()或者free()函数;
    3) 函数体内调用了标准I/O函数。

   4.readdir函数还有一个类似的readdir_r函数,这个函数就是可重入的函数,需要在函数外面创建struct dirent结构体并分配内存。

int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

四.示例代码

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <dirent.h>
  4. int main(int argc, char *argv[])
  5. {
  6. DIR *dir = NULL;
  7. struct dirent *ent = NULL;
  8. if(argc != 2)
  9. {
  10. printf("usage:%s filename\n",argv[0]);
  11. return -1;
  12. }
  13. //打开目录
  14. dir = opendir(argv[1]);
  15. if(NULL == dir)
  16. {
  17. perror("opendir");
  18. return -1;
  19. }
  20. //读取目录
  21. while(1)
  22. {
  23. ent = readdir(dir);
  24. if(ent != NULL)
  25. {
  26. //读取到了子文件,处理子文件
  27. printf("filename: [%s]\n",ent->d_name);
  28. }
  29. else
  30. break;
  31. }
  32. return 0;
  33. }
  34. /*
  35. * 要读取某个目录下某个文件的详细信息
  36. *一般步骤是:
  37. * 1.使用opendir函数打开目录A,返回指向目录A的DIR结构体指针D。
  38. * 2.调用readdir(D)函数读取目录A下所有的文件(包含目录),返回指向A目录下所有文件的struct dirent结构体指针E。
  39. * 3.遍历E,调用stat(E->d_name,stat *P)来获取每个文件的详细信息,存储在stat结构体P中
  40. *
  41. */

来自为知笔记(Wiz)

时间: 2024-11-01 10:21:50

读取文件目录的相关文章

PHP 简易读取文件目录下的文件,生成css spirte图片

因为个人不是对PS熟悉,不清楚如何在PS中生成一张横向有序的spirte图片,使用了"css sprite V4.3"版本,生成的图片会出现压缩图片大小的情况,本想修改原作者开发的程序,但是不懂C#,只好使用PHP gd库进行生成css spirte图片. 1 <?php 2 header("Content-type: image/png"); 3 $path = "output";//建议这个文件目录下放入所有需要生成css spirte

Python读取文件目录并检索

import os import os.path f=open("Shouldlist.txt") ShouldList=[] while 1: line =f.readline().strip('\n') #  print line if not line: break ShouldList.append(line) # print ShouldList rootdir="Z:\GETOT_BW" ArriveFile='' for parent,dirnames

C# 读取文件目录下的所有的文件

DirectoryInfo 类 公开用于创建.移动和枚举目录和子目录的实例方法.无法继承此类. Directory 类 公开用于创建.移动和枚举通过目录和子目录的静态方法.无法继承此类 一般使用directoryInfo类比较多 DirectoryInfo dInfo = new DirectoryInfo(“绝对路径”);//实例化一个DirectoryInfo的对象//int index = 0; foreach (FileInfo fInfo in dInfo.GetFiles())// 

windows中遍历读取指定文件目录下的文件

#include "stdafx.h" #include "windows.h" #include <vector> #include <string> #include "iostream" using namespace std; typedef std::vector<std::string> file_lists; static int str_compare(const void *arg1, con

java读取某个目录下所有文件并通过el表达式将相关文件信息展示出来,js提供页面搜索及查看下载功能

从服务器上读取某个目录下的文件  将文件名 文件修改日期   及文件 大小展示在前台  并可以查看及下载 第一步:读取文件目录下的文件,并将文件按时间由大到小排列 public ArrayList<File> getLogs() { // TODO Auto-generated method stub ArrayList<File>  tomcatLogs = new ArrayList<File>(); File path = new File(""

自动化构建工具gulp简单介绍及使用

一.简介及安装: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率 gulp的优点:基于流的操作.任务化. 常用api:src .dest.watch.task.pipe 由于gulp是基于node的所以使用的时候需要通过npm或者cnpm安装全局安装(cnpm i -g gulp) 常用的gulp需要安装的包括gulp-cl

nodejs 文件系统(fs) 删除文件夹 及 子文件夹下的所有内容

http://blog.163.com/hule_sky/blog/static/2091622452015112821829773/ node 文件系统fs 为我们提供了一些方法 进行文件和文件夹的读写删除等操作 下边将介绍删除文件夹及子文件夹下的所有内容的相关命令(均含有同步和异步方法) 1. fs.stat && fs.statSync 提供了访问文件的属性信息 2. fs.readdir && fs.readdirSync 提供读取文件目录信息 3. fs.unli

NodeJS遍历文件生产文件列表

功能需求:在工作中我们可能经常需要知道项目中静态文件列表发布,一个一个去检索写,那就太苦逼了. 要想知道里面的文件列表是不是很蛋疼,可能我们也会有dos tree去获取. 这里分享一下,通过node,知道文件路径,并配置远程路径,直接copy,发布. 新建filelist.js 里面都有注释,我就不哆嗦了. var fs = require("fs"); //path模块,可以生产相对和绝对路径 var path = require("path"); //配置远程路

Xtrabackup 增量备份、恢复、原理

整合了网上的一些资料,结合自己的理解,并进行了实验验证 理解一: 1,Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具:xtrabackup.innobackupex (1).xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 (2). innobackupex是参考了In