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;
}
输出:
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » io目录操作学习
发表评论 取消回复