目录相关操作函数 opendir、readdir、getcwd、chdir

       谈到目录相关函数的操做,我们不得不先说一下文件夹和目录的一点小的区别。文件夹是包括它里面的文件夹和文件的大小,目录是类似于书的目录,它只是告诉我们内容在第几页,它是不包括里面的内容。

其次,目录的本质是一个索引表,索引表由目录项组成,目录项是由文件名和索引号组成。

目录本质​​​
 

     

       

我们在Linux下新建一个目录时,系统会分配一个 i_node和至少一块block块给该目录。其中,i_node记录该目录的相关权限与属性以及该文件在数据域(block块)中的位置。而block则是记录在这 个目录下的文件名与该文件名占用的i_node号码数据。这也就是window下叫文件夹和Linux下叫目录的一点区别,因为它确实就是一个索引。这也解释了为什么明明所有文件都是在根目录下,却还可以放在不同的磁盘,因为目录与其下的子目录和文件,此时不是包含与被包含的关系,而只是一个索 引。

     好了,言归正传,说完了这些,我们来看一下目录相关操作函数的用法:

     1、opendir   :   打开指定路径下的某一个目录
     
    DIR *dp = opendir (const char *name )      

                     参数 :  name        ----->  指定路径下的目录名
                     返回值 :  成功: 返回一个目录指针  (dp)
                                      失败:NULL

     2、readdir   :  读取目录里面的文件名 (一次只能读取一个文件

         struct dirent  *p  =  readdir ( DIR *dp )

                      参数 : dp    ----> 目录指针
                      返回值 : 成功: 返回一个目录项指针 (p )
                                      失败: NULL

                      注意 :1、 读取成功返回的目录项指针 p 是指向一个结构体 struct dirent ,结构体里面定义了表示一个文件的索引                                         号、类 型、大 小、名字等成员变量。

                                        struct dirent 
                                         {
                                             ino_t          d_ino;                 文件索引号
                                             off_t          d_off;                   目录项的偏移量
                                             unsigned short d_reclen;      目录项的大小
                                             unsigned char  d_type;         文件类型
                                              char          d_name[256];      文件名  
                                         };

                                          结构体中,文件类型( d_type )又分为7类:
                                                 DT_BLK      块设备文件     (b)
                                                 DT_CHR      字符设备文件 (c)
                                                 DT_DIR      目录文件         (d)
                                                 DT_FIFO     管道文件        (p)
                                                 DT_LNK      链接文件        (l)
                                                 DT_REG      普通文件        (-)
                                                 DT_SOCK    套接字文件    (s)

                                    2、读取目录里面的文件失败返回NULL,所有文件全部读取完(成功读取)也是返回NULL

       3、gercwd  : 获取当前系统工作路径 (作用同 pwd 命令)

             char *p = getcwd(char *buf, size_t size)   (获取到的路径是绝对路径

                      参数: buf                -----> 用于存储 获取到的路径
                                  size               ----> 存储获取路径这个缓冲区的大小            

                       返回值:   成功: 返回 存储 获取到的路径缓冲区(buf)的首地址
                                      失败: 返回NULL

      4、chdir      : 改变当前系统工作路径

             int  ret = chdir(const char *path);

                     参数:  path               -----> 要切换的工作路径

                     返回值:   成功:0
                                       失败:-1

      !!! 最后附上一个代码截图 说明

  

     菜鸟虽菜,但一直在学习的路上,决定开始写博客也是为了让自己慢慢 总结自己所学的东西,加深印象、慢慢消化,如果有写得不对的地方,希望各位大神不吝纠正。  小弟 先在这里谢过了 !!!

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值