本文共 1405 字,大约阅读时间需要 4 分钟。
部分摘自:
我觉得写得很不错,一下子弄懂了为什么有目录流。
-------------------------------------------------------------------------------------------------------------------------------
“一切都是文件”,目录也是文件,即目录文件。
目录当然也是特殊的文件,里面存放的信息是子文件相关的信息。具体怎么存储可以不太关注。
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
转载地址:http://rgani.baihongyu.com/