[操作系统]fy姥爷的考试(第三周)

读目录

对某个目录具有存取许可权的任一用户都可读该目录,但是只有内核才能写目录(防止文件系统发生混乱)。一个目录的写许可权位和执行许可权位决定了在该目录中能否创建新文件以及删除文件,他们并不表示能否写目录本身。

目录的实际格式依赖于unix的具体实现。

#include<sys/types.h>
#include<dirent.h>

DIR *opendir(const char *pathname);
//返回:若成功则为指针 若出错则为NULL
struct dirent *readdir(DIR *dp);
//返回:若成功则为指针 若在目录尾或出错则为NULL
void rewinddir(DIR *dp);
int closedir(DIR *dp);

定义在头文件

    struct dirent{
    ino_t d_ino; //i-node number
    char d_name(NAME_MAX+1); //null-terminated filename
}

POSX. 1 并没有定义d_ino,因为这是一个实现特征。POSIX. 1在此结构中只定义d_name项
 
POSX.1并没有定义将NAME_MAX定义为一个常数——其值依赖于该目录所在的文件系统,并且通常可用fpathconf函数取得。在BSD类文件系统中,NAME_MAX的常用值255。但是,因为文件名是以NULL字符结束的,所以在头文件中如何定义数组d_name并无多大关系。

DIR结构是一个内部结构,他由这四个函数用来保存正被读的目录的有关信息。其作用类似于FIFE结构。FIFE结构由标准I/O库维护。

由opendir返回的指向DIR结构的指针由另外三个函数使用。opendir执行初始化操作,使第一个readdir读目录中的第一个目录项。目录中各目录项的顺序与实现有关,他们通常并不按字母顺序排序。

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<dirent.h>
int main(){
    DIR *dir = opendir("./");
    if(dir==NULL){
        printf("Open directory fail\n");
        return 0;
    }
    struct dirent *de;
    while((de=readdir(dir))!=NULL)
    {
        printf("%s\n",de->d_name);
        printf("end\n");
    }
    closedir(dir);
    return 0;
//output : 显示当前文件夹的硬连接 就是说 我当前文件夹 有 p1 p1.c p2 p2.c p3 p3.c 
// . 指的是自己 而 ..指的是自己的父文件夹
/*
p1
end
p2.c
end
..
end
p2
end
p1.c
end
.
end
p3.c
end
p3
end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值