中国十大电商做的好的网站网站控制台
1、基本概念
目录也是一种文件,因此操作流程与普通文件类似,有诸如打开、关闭、定位等概念,但目录是一种特殊的文件,目录存储的数据的最小单位并不是字符,而是目录项。这使得目录跟普通文件又有区别。
在Linux中,目录有几个要点:
- 整个分区被分成两部分,一部分称为i节点域,另一部分称为数据域 
- i节点域记录的是整个分区的基本信息,包括分区可用空间和已用空间的管理信息
 - 数据域存储文件实际内容数据
 - 目录所存储的数据单元是目录项,目录项指的是结构体
 
 
struct dirent{},其内部保存的是文件的名称、i节点号等基本信息,不包含文件具体内容。
// 目录项结构体
struct dirent
{ino_t          d_ino;       /* Inode number */编号off_t          d_off;       /* Not an offset; see below */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]; /* Null-terminated filename */文件名
}; 
- 任何一个目录至少包含两个目录项:.和.. 
- .代表当前目录,..代表上一级目录
 - 如果本目录就是根目录,那么..也代表本级目录
 
 
2、目录的创建与删除

 
int main(void)
{// 在家目录下创建一个空目录mkdir("/home/share/str", 0755);// 将空目录删除(以下两条语句等价)rmdir("/home/share/str");remove("/home/share/str");
} 
3、目录的打开,关闭与读取

注:
- 与文件指针类似,目录指针并不指向目录中的数据,它仅仅是代表了目录;
 -  
打开目录并不是进入目录,实际上进入目录的函数是:chdir()
 -  
读取目录获得的不是一个个的字节,而是一个个“目录项”;
 
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>int main(int argc,char *argv[])
{//打开目录argv[1],获取目录指针DIR *fd=opendir(argv[1]);if(fd==NULL)return 0;//读取每个目录项,并输出各个文件的名字struct dirent *p;while (1){p=readdir(fd);if (p==NULL){printf("读完了!\n");break;}printf("%s\n",p->d_name);}return 0;
} 
输出:
