目录流

2023-05-16

部分摘自:https://blog.csdn.net/hou512504317/article/details/46381641

我觉得写得很不错,一下子弄懂了为什么有目录流。

-------------------------------------------------------------------------------------------------------------------------------

“一切都是文件”,目录也是文件,即目录文件。

目录当然也是特殊的文件,里面存放的信息是子文件相关的信息。具体怎么存储可以不太关注。

ext3/4 文件系统下链式的存储结构。

在应用开发中,目录和文件一样,有目录流的概念。(这就让我理解为什么讲IO编程时讲stat这些函数了,之前没有理解千万不要不了了之,真正探究清楚,是会有收获的,那感觉讲道理应该用管理普通文件的函数管理目录文件就可以了啊,为什么还专门弄个管理目录的?不过文件IO都是基于文件描述符的,标准IO是基于流的,)

fopen opendir

fread/…. readdir

ftell telldir

fseek seekdir

rewind rewinddir

fwrite mkdir/rmdir

fclose closedir

当前的工作路径的问题。

DIR *opendir(const char *name); //打开给定路径下的目录,返回目录流

DIR *fdopendir(int fd);

int closedir(DIR *dirp);

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

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

这个函数每执行一次,返回一个目录条目(就是一个子文件或者子目录的信息),当结束后,返回

NULL,并且向下指向下一个目录条件。

struct dirent:

On Linux, the dirent structure is defined as follows:

struct dirent {

ino_t d_ino; /* inode number */ //在当前文件系统下,这个文件的惟一编号

off_t d_off; /* offset to the next dirent */

unsigned short d_reclen; /* length of this record */

unsigned char d_type; /* type of file; not supported //类型,并不是所有的系统支持

by all file system types */

char d_name[256]; /* filename */ //子文件或者子目录名

};

文件类型:普通文件,目录文件,链接文件,字符设备文件,块设备文件,socket,管道文件。

#define S_IFSOCK 0140000

#define S_IFLNK 0120000

#define S_IFREG 0100000

#define S_IFBLK 0060000

#define S_IFDIR 0040000

#define S_IFCHR 0020000

#define S_IFIFO 0010000
 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目录流 的相关文章

随机推荐