C++ readdir、readdir_r函数

readdir, readdir_r - 读一个目录

readdir函数:

struct dirent *readdir(DIR *dirp);

The  data  returned by readdir() may be overwritten by subsequent calls to readdir() for the same directory stream.

成功时,readdir() 返回指向 dirent 结构的指针。(这个结构是静态分配的;不要试图去free(3) 它。)如果到达了上当结尾,NULL 被返回并保持ERRNO不变。如果错误发生了,NULL 被返回并小心设置 ERRNO值。

readdir函数为非线程安全函数;

解决方法:

1、加锁;

2、用局部变量保存数据。

readdir_r()就是采用局部变量保存数据;

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

The  readdir_r() function returns 0 on success.  On error, it returns apositive error number (listed under ERRORS).  If the end of the  directory  stream  is  reached,  readdir_r()  returns 0, and returns NULL in*result.

readdir_r() 函数是 readdir() 函数可重入版本。它从目录流dirp 里读取下一个目录项,并且通过调用者分配的缓存区 entry返回。返回条目的指针被放置于 *result 里;如果目录流到达结尾,那么把*result 设置为 NULL。

#include <iostream>
#include <dirent.h>
using namespace std;
int main()
{
  struct dirent *pStResult = NULL;
  struct dirent *pStEntry = NULL;
  int len = 0;

  DIR *pDir = opendir("/home/wzy/owner_lib");
  if(NULL == pDir)
  {
      printf("Opendir failed!\n");
      return 0;
  }

  len = offsetof(struct dirent, d_name) + pathconf("/home/wzy/owner_lib", _PC_NAME_MAX) + 1;
  pStEntry = (struct dirent*)malloc(len);
  while(! readdir_r(pDir, pStEntry, &pStResult) && pStResult != NULL)
  {
      printf("file‘name is %s\n", pStEntry->d_name);
  }

  free(pStEntry);
  closedir(pDir);
  return 0;
}

  

C++ readdir、readdir_r函数,布布扣,bubuko.com

时间: 2024-10-24 19:56:11

C++ readdir、readdir_r函数的相关文章

readdir() opendir() 函数

<?php $dir = "/images/"; // 打开目录,然后读取其内容 if (is_dir($dir)){ if ($dh = opendir($dir)){ while (($file = readdir($dh)) !== false){ echo "filename:" . $file . "<br>"; } closedir($dh); } } ?> 运行结果是 filename: cat.gif fi

读取文件目录

一.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;       /* inod

POSIX多线程

全文共分四部分: POSIX多线程—概述    POSIX多线程—异步编程举例    POSIX多线程—线程基本概念    POSIX多线程—互斥量概述 POSIX多线程—概述 Content 1. 基础概念 2. 线程安全 3. 可重入 4. 并发系统基本功能 1. 基础概念 线程 进程里执行代码的部分: 包含一系列机器指令所必须的机器状态,包括当前指令位置(一般为PC寄存器).栈顶指针SP.通用寄存器.地址和数据寄存器等. 线程不包括进程中的其他数据,如地址空间和文件描述符: 进程 线程加上

apue第四章 文件和目录

函数stat,fstat,fstatat, lstat #include <sys/stat.h> int stat(const char *restrict pathname, struct stat *restrict buf); int fstat(int fd, struct stat *buf); int lstat(const char *restrict pathname, struct stat *restrict buf); int lstat(int fd, const c

UNIX 基础知识

登陆  1.登录名 系统在其 口令文件(通常是/etc/passwd文件) 中查看用户名,口令文件中包含了有关用户的信息. 2.shell shell是一个命令解析器,读取用户输入的内容,然后执行命令.   文件和目录 1.文件系统 UNIX文件系统是 目录 和 文件 的一种层次结构. 所有 的起点成为根(root)目录, 根目录的名称是一个” / ”           目录 是一个包含目录项的文件. 可以认为每个目录项都包含一个文件名,同时还包含文件属性的信息(stat和fstat函数返回包

C/C++ 遍历目录文件,默认目录下

每次遇到这样的问题总会折腾很久,到网上搜,或者查资料,弄了很多次,但就是没记住,这次写程序又遇到了,干脆就把它都弄清楚了,然后顺便在这里记录一下,以后再遇到就不用到处去找了. 用 C/C++ 遍历目录文件主要有两种方式,分别对应在 Windows VS 环境下和 Linux\Unix 环境下的方法,它们各自所使用的函数如下: (Windows VS)_findfirst, _findnext, _findclose (Linux\Unix)opendir, readdir, closedir 下

Linux下DIR,dirent,stat等结构体详解

摘要: 最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. DIR结构体类似于FILE,是一个内部结构,以下几个函数用这个内部结构保存当前正在被读取的目录的有关信息(摘自<UNIX环境高级编程(第二版)>).函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用: 最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎

编写自己的ls命令

····要编写ls命令,首先要了解它能做什么,完成了什么工作,是如何完成这些工作的····  一.ls命令能做什么? 我们在命令行输入ls,ls默认找出当前目录中所有文件的文件名,并且按照字典序排序后输出.ls命令有很多参数选项,可以决定ls的输出内容.如果参数是目录,ls列出目录的内容,如果参数是文件,ls列出文件名和属性. 例如:ls -l   (每行7个字段,mode+links+owers+group+size+last-modified+name) 问题在于: 1.如何列出目录的内容.

(三) 一起学 APUE 之 文件和目录

. . . . . 前面两篇博文讲了文件 IO 的基本操作,但是它们操作的都是文件本身所存储的有效数据.而文件系统保存文件的时候不仅仅要存储文件内的数据,还要存储许多亚数据,即文件属性和其它特征数据.这篇博文 LZ 就带领大家讨论文件系统亚数据的操作. 1.stat(2) 1 stat, fstat, lstat - get file status 2 3 #include <sys/types.h> 4 #include <sys/stat.h> 5 #include <u