io目录操作学习

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;
}

输出:

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

biubiuboomy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值