读目录

简介: 读目录

Linux 系统中,对某个目录具有存取许可权的任一用户都可读该目录,但是只有内核才能写目录(防止文件系统发生混乱)。在文件属主中讲过,一个目录的写许可权和执行许可权确定了在该目录中能否创建新文件以及删除文件。


opendir() 函数和 readdir() 函数可以完成对目录的操作,实现对目录的读取。

#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);点击复制复制失败已复制


读目录之前,首先应该选择打开一个目录。 opendir() 函数用于打开一个目录,参数 name 表示目录的名字,函数执行调用,返回一个指向 DIR 结构的指针,也可以把 DIR* 称为目录流指针,类似于打开文件的 FILE*DIR 的本质是一个结构体,在 <dirent.h> 中定义如下:

typedef struct __dirstream DIR;点击复制复制失败已复制


得到指向 DIR 结构体的指针之后,都可以使用 readdir() 函数对目录进行读取。

#include <dirent.h>
struct dirent *readdir(DIR *dirp);点击复制复制失败已复制


readdir() 函数实现对目录的读取,其参数的类型就是 DIR* 。由此可知,选择读取一个目录,首先应该得到一个与该目录有关联的结构体指针 DIR* 。函数返回一个结构体 dirent 指针。结构体 dirent 定义如下:

struct dirent {
  ino_t d_ino;  // inode number
  off_t doff;   // offset to the next dirent
  unsigned short d_reclen;  // length of this record
  unsigned short d_type;    // type of file; not supported by all file system types
  char d_name[256];         // filename
}点击复制复制失败已复制


其中, d_ino 表示文件的索引号d_off 表示在目录中文件的偏移d_reclen 表示文件名的长度d_type 表示文件的类型d_name 表示文件名。因此,可以通过 readdir() 函数返回的 dirnet 结构体指针访问 dirent 结构体成员,得到文件的信息。

目录
相关文章
|
8月前
|
C#
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
102 0
|
8月前
|
人工智能 BI
文件的读写
文件的读写。
44 0
文件或目录损坏且无法读取|4-17
文件或目录损坏且无法读取|4-17
文件复制操作
文件复制操作
91 0
读取指定文件夹下面的所有文件(含子目录)
读取指定文件夹下面的所有文件(含子目录)
55 0
目录的操作
目录的操作
107 0
|
存储 C++
C++中txt文件的读、写操作介绍
C++中txt文件的读、写操作介绍
472 0
|
缓存 Windows
文件夹显示文件或目录损坏且没法读取
 用户反馈说Win7打开Local Settings文件夹提示“位置不可用,拒绝访问"怎么办?Local Settings是Windows系统中的一个隐藏文件,一般存放着和上网有关的历史记录和缓存之类的文件,如果打开Local Settings文件时提示"位置不可用,拒绝访问"下面跟随小编脚步一起看看具体解决方法。
650 0
|
C#
原 BinaryWriter和BinaryReader(二进制文件的读写)
原文 BinaryWriter和BinaryReader(二进制文件的读写) C#的FileStream类提供了最原始的字节级上的文件读写功能,但我们习惯于对字符串操作,于是StreamWriter和 StreamReader类增强了FileStream,它让我们在字符串级别上操作文件,但有的时候我们还是需要在字节级上操作文件,却又不是一个字节 一个字节的操作,通常是2个、4个或8个字节这样操作,这便有了BinaryWriter和BinaryReader类,它们可以将一个字符或数字按指定 个数字节写入,也可以一次读取指定个数字节转为字符或数字。
1636 0
|
缓存 网络协议 关系型数据库
[20180316]共享服务模式和直接路径读.txt
[20180316]共享服务模式和直接路径读.txt --//在共享服务器模式下,执行计划不会选择直接路径读,通过例子证明. 1.环境: SYS@book> @ &r/ver1 PORT_STRING          VERSION    BANNER...
877 0